Riferimento a colonne di altre tabelleSto cercando di creare una nuova tabella leggendo da due tabelle di origine.Vorrei evitare di unirli in un unico grande tavolo e manipolare da lì.La nuova tabella sarà una matrice di delta tra le due tabelle di origine.Lo script sta creando bene le colonne, ma non le sta popolando con nulla.Presumo che ci sia della sintassi che mi manca nel fare riferimento a colonne di altre tabelle nella mia formula.
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);Miscelazione e pulizia dei datiRi: Fare riferimento a colonne da altre tabelleQuesto è facile da verificare. Fare doppio clic sull'intestazione della colonna in JMP e si aprirà la finestra Col Info. Avrà il vero nome della colonna elencato.Ri: Fare riferimento a colonne da altre tabelleHo importato i nomi delle colonne da e foglio excel (output del nostro tester), quindi penso che siano sepolti nei nomi delle colonne
Ri: Fare riferimento a colonne da altre tabelleLe unità (definite come proprietà della colonna) non fanno parte del nome della colonna.
Ri: Fare riferimento a colonne da altre tabelleah. sembra che tutte le mie colonne dopo la colonna 2 abbiano un (xxx) nel nome - le unità di misura.Potrebbe essere quello?Il registro genera un errore per ogni colonna del genere
Ri: Fare riferimento a colonne da altre tabellePresumo che sia un problema di dati.Il codice ha funzionato bene per il mio caso di test con 2 colonne, ma è scritto per gestire tutte le colonne che trova nella variabile "predt"
For( i = 1, i <= N Cols( predt ), i++,
Quindi, quello che devi fare è scorrere il codice e controllare i valori delle variabili e vedere cosa sta succedendo.Senza che i tuoi dati vengano pubblicati in questa discussione, non so cosa stia succedendo.
Ci sono messaggi visualizzati nel registro?
Ri: Fare riferimento a colonne da altre tabelleGrazie per la risposta rapida!Sembra che con questo script ottengo solo i delta delle prime due colonne.Le colonne sono formattate come il resto (numerico, continuo) quindi non sono sicuro di cosa stia succedendo qui.
Ri: Fare riferimento a colonne da altre tabelleHai avuto un paio di problemi che ti stavano prendendo in giro (gioco di parole).
- Devi <
- Il formato per l'utilizzo della funzione Column() non è postdt:column( postcols[i] ).Se questo fosse il metodo da usare in questa situazione, il form sarebbe Column( postdt, postcols[i] ).Ma non è quello che serve qui
- L'assegnazione di formule nelle operazioni New Column() è un po' complicata.La Formula() impostata non viene valutata prima che venga creata la formula.Cioè, se inserisci postcols[i] in una formula, non cerca il valore di postcols[i] mentre sta costruendo la formula, inserisce semplicemente postcols[i] nella formula e quindi tenta di eseguirlo quando la formula viene eseguita.Il problema con questo è che poiché la variabile "i" viene riassegnata più e più volte in un ciclo, ognuna delle formule a cui fa riferimento "i" viene modificata ogni volta che "i" viene modificata all'interno di JSL.Non è quello che vuoi.Quindi ciò che deve essere fatto è valutare in JSL la stringa esatta di codice che desideri, quindi eseguire quel JSL per creare la nuova colonna.Puoi vederlo nel JSL corretto di seguito
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");