Ciao a tutti,
Ho difficoltà a capire perché il seguente codice fallisce:
// This code doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( selectedCol[1] ) < Col Mean( selectedCol[2] ),
begin = selectedCol[1];
end = selectedCol[2];
,
begin = selectedCol[2];
end = selectedCol[1];
);
Voglio che l'intera colonna venga riassegnata alle variabili inizio / fine, ma non succede. Ho provato questo:
// This code still doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( As Column( selectedCol[1] ) ) < Col Mean( As Column( selectedCol[2] ) ),
begin = As Column( selectedCol[1] );
end = As Column( selectedCol[2] );
,
begin = As Column( selectedCol[2] );
end = As Column( selectedCol[1] );
);
Posso avere un aiuto, concettuale e pratico entrambi. Sembra molto semplice, ma ovviamente mi manca qualcosa di importante.
John
Grazie, grazie Julian!
Questo è incredibilmente utile !!!!
John
Ciao @john_madden ,
Due cose che noto qui. Innanzitutto, JSL valuta le funzioni nidificate dall'esterno, il che significa che è necessario un Eval () per il riferimento alla colonna che fa parte dell'elenco. In secondo luogo, se sto capendo correttamente, vuoi che tutti i valori delle colonne siano assegnati all'inizio e alla fine. In tal caso, devi inviare un messaggio alla colonna per restituire quei valori: << Ottieni valori. Il seguente dovrebbe funzionare (supponendo che sia il tuo intento!).
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( eval(selectedCol[1]) ) < Col Mean( eval(selectedCol[2]) ),
begin = selectedCol[1] << Get Values;
end = selectedCol[2] << Get Values;
,
begin = selectedCol[2] << Get Values;
end = selectedCol[1] << Get Values;
);
Spero che questo possa essere d'aiuto!
@julian
Edit: posso vedere come qualcuno potrebbe guardare al mio punto sulle funzioni annidate e dire "Wait, Col Mean (selectedCol [1])" non è una funzione annidata, quindi perché non funziona? " In effetti, l'iscrizione è una funzione, è fatta semplicemente con parentesi. Potresti aver scritto:
Col Mean( Subscript(selectedCol,1) )
e in questo caso, l'annidamento della funzione è ovvio. Quello che succede quando JMP prova a valutare questo bit di codice è che Col Mean () viene valutato per primo, e quella funzione richiede una colonna su cui operare. Colpisce una funzione Subscript () e non sa cosa farne. Quindi, avvolgendo Subscript () in Eval (), diamo a JMP il primo modo di processare il subscripting (che restituisce un riferimento a una colonna) prima di provare a valutare Col Mean ().
Col Mean( Eval( Subscript( selectedCol,1 ) ) )
Spero che la spiegazione aggiuntiva aiuti!