Script JSL per trasformare colonne selezionateCiao, in JMP 14 vorrei consentire a un utente di selezionare colonne non specifiche, ad esempio X, Y, Z, e quindi eseguire uno script JSL che genera nuove colonne con la differenza di ogni colonna, vale a dire XY, XZ, YZ. Lo script non avrebbe bisogno di calcolare YX o ZX poiché tali differenze sono già state calcolate. Qualsiasi aiuto è apprezzato, grazie!
Ri: JSL Script per trasformare colonne selezionateEcco un modo (usando le formule):
NamesDefaultToHere(1);
// Make a table to use
nr = 100; // Number of rows
nc = 10; // Number of columns
dt = AsTable(J(nr, nc, RandomNormal()));
dt << setName("Example Data");
// Make a UI to allow selection of columns from the current data table
dt = CurrentDataTable();
nw = NewWindow("Difference of Columns",
TextBox("Select columns:", << fontColor("Blue")),
clb = ColListBox(all, numeric),
LineUpBox(NCol(2),
ButtonBox("OK", OKscript),
ButtonBox("Cancel", nw << closeWindow)
);
);
nw << setWindowSize(300, 300);
// This script runs if the user hits 'OK'
OKScript =
Expr(
nw << closeWindow;
// Get which columns were selected
colList = clb << getSelected;
// Define a formula column for each pairwise difference
for(c1=2, c1<=NItems(colList), c1++,
for(c2=1, c2<C1></C1>
Usa 'Aiuto> Libri> Guida allo scripting' e 'Guida> Indice di scripting' per capire come funziona.
Ri: JSL Script per trasformare colonne selezionateGrazie mille Ian! Apprezzo la rapida risposta. Questo è quello che stavo cercando.
E se volessi rendere le cose un po 'più fantasiose? Diciamo che volevo consentire all'utente di selezionare le colonne (come prima) e poi anche di essere in grado di scegliere 1 o più delle seguenti trasformazioni: aggiungi, sottrarre, moltiplicare, dividere. Lo script creerebbe quindi nuove colonne in base alle trasformazioni selezionate. Grazie !
Ri: JSL Script per trasformare colonne selezionateSono stato in grado di venire con questo script. Non ero sicuro di come abbreviare la trasformazione in una dichiarazione "se".
@ian_jmp
NamesDefaultToHere(1);
// Make a table to use
nr = 100; // Number of rows
nc = 10; // Number of columns
dt = AsTable(J(nr, nc, RandomNormal()));
dt << setName("Example Data");
// Make a UI to allow selection of columns from the current data table
dt = CurrentDataTable();
nw = NewWindow("New Column Transforms",
TextBox("Select all transforms to perform", << fontColor("Blue")),
VListBox(
cb=CheckBox({"Plus","Minus","Times","DivideBy"},
Print(
"Selected: " || Concat Items(cb <<GETSELECTED></GETSELECTED>Ri: JSL Script per trasformare colonne selezionateÈ possibile utilizzare la funzione Match () invece della funzione If (). Meglio ancora, potresti usare la funzione Scegli () se hai sostituito le caselle di controllo con i pulsanti di opzione. (Sembra che la scelta dell'aritmetica sia esclusiva.)