Script JSL para transformar las columnas seleccionadasHola, en JMP 14 me gustaría permitir que un usuario seleccione columnas no específicas, digamos X, Y, Z, y luego ejecute un script JSL que genere nuevas columnas con la diferencia de cada columna, es decir XY, XZ, YZ. La secuencia de comandos no tendría que calcular YX o ZX, ya que esas diferencias ya se han calculado. Cualquier ayuda es apreciada, gracias!
Re: Secuencia de comandos JSL para transformar columnas seleccionadasAquí hay una forma (utilizando fórmulas):
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>
Use 'Ayuda> Libros> Guía de secuencias de comandos' y 'Ayuda> Índice de secuencias de comandos' para comprender cómo funciona.
Re: Secuencia de comandos JSL para transformar columnas seleccionadasMuchas gracias Ian! Agradezco la respuesta rápida. Eso es lo que estaba buscando.
¿Y si quisiera hacer las cosas un poco más elegantes? Digamos que quería permitir que el usuario seleccione columnas (como antes) y luego poder elegir una o más de las siguientes transformaciones: sumar, restar, dividir, dividir. El script crearía nuevas columnas basadas en las transformaciones seleccionadas. Gracias !
Re: Secuencia de comandos JSL para transformar columnas seleccionadasTuve la oportunidad de llegar a este guión. No estaba seguro de cómo acortar la transformación en una declaración "si".
@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>Re: Secuencia de comandos JSL para transformar columnas seleccionadasPodría usar la función Match () en lugar de la función If (). Mejor aún, puede utilizar la función Choose () si reemplaza las casillas de verificación con los botones de opción. (Parece que la elección de la aritmética es exclusiva.)