JSL: use una casilla de verificación con los niveles de una columnaHola,
Espero que lo estás haciendo bien.
Tengo una pregunta sobre los scripts de las casillas de verificación en JMP.
Tengo un conjunto de datos con una variable de "fuerza" y quiero crear un subconjunto si el conjunto de datos está de acuerdo con una casilla de verificación que presenta todas las fortalezas del conjunto de datos. El objetivo es que el usuario marque en la casilla las fortalezas de su interés y que las filas del conjunto de datos se seleccionen de acuerdo con las fortalezas marcadas en la casilla. Como las fortalezas no son necesariamente las mismas según el conjunto de datos, me preguntaba si es posible "extraer" los valores únicos de las fortalezas de la columna y luego presentar las fortalezas en la casilla de verificación para elegir en la casilla de verificación el fortalezas de interés. Quiero que el script sea lo más general posible para analizar todos los conjuntos de datos con todos los puntos fuertes posibles.
Muchas gracias y que tenga un buen día,
Vaquero
Automatización y secuencias de comandosRe: JSL: Usar una casilla de verificación con los niveles de una columnaHola de nuevo,
Tengo una última pregunta: ¿cómo puedo modificar el código para nombrar cada subconjunto según las fortalezas que se marcaron en la casilla de verificación?
Muchas gracias y que tengas un buen día.
Vaquero
Re: JSL: Usar una casilla de verificación con los niveles de una columnaTodo está bien !
Muchas gracias !
Que tengas un buen dia,
Vaquero
Re: JSL: Usar una casilla de verificación con los niveles de una columna
¿Está el subconjunto almacenado en la variable dt2?
Sólo si defines una variable dt2 
Puedes hacerlo:
dt2 = dt << subset(
selected rows(1),
selected columns only(0)
);
¿Existe algún comando para cerrar u ocultar el subconjunto del conjunto de datos?
Como recién lo acabamos de crear, asumo que no queremos cerrarlo, pero si no quieres que el usuario lo vea, puedes hacerlo invisible:
dt2 = dt << subset( invisible,
selected rows(1),
selected columns only(0)
);
Si ya tengo un conjunto de datos abierto en Jmp, ¿cómo puedo definirlo en un dt variable
Puede asociar la variable dt a la tabla abierta actual,
dt = current data table();
o si hay varias tablas abiertas, haciendo referencia a la tabla:
dt = data table("strength data");
Finalmente, una pregunta que no hiciste pero que quizás te estés preguntando.Una vez que el usuario haya hecho clic en el botón para crear el subconjunto, si desea cerrar la ventana que contiene las casillas de verificación, puede agregar las siguientes líneas al final del hacerSubconjunto función:
cr = current report();
cr << close window;
Buena suerte.
Re: JSL: Usar una casilla de verificación con los niveles de una columnaMuchas gracias ! ¿El subconjunto está almacenado en la variable dt2?
Re: JSL: Usar una casilla de verificación con los niveles de una columnaMuchas gracias !
Dos últimas preguntas:
- ¿Existe algún comando para cerrar u ocultar el subconjunto del conjunto de datos?
- Si ya tengo un conjunto de datos abierto en Jmp, ¿cómo puedo definirlo en un dt ¿variable?
Muchas gracias y que tenga un buen día,
Vaquero
Re: JSL: Usar una casilla de verificación con los niveles de una columna'for each' es nuevo en la versión 16. Si tiene una versión anterior, puede usar un bucle for más tradicional:
for (i=1,i<=nitems(selected),i++,
rows = dt << select where(:Strength==selected[i],
current selection("extend")
);
);Re: JSL: Usar una casilla de verificación con los niveles de una columnaHola David, ¡muchas gracias por tu ayuda!
Sin embargo, cuando se ejecuta el código, aparece el siguiente error:

¿Cómo puedo arreglarlo?
Muchas gracias y que tenga un buen día,
Vaquero
Re: JSL: Usar una casilla de verificación con los niveles de una columnaUn ejemplo alternativo:
Names Default to Here( 1 );
// mock up data set with Strength
dt = New Table( "Strength",
New Column( "Strength", "Character", "Nominal",
Values( {"Intelligent", "Innovative", "Initiative", "Introvert", "Intelligent",
"Innovative", "Initiative", "Introvert", "Intelligent", "Innovative",
"Initiative", "Introvert"} )
)
);
// get unique values from the strength column
summarize(dt,levels=by(:strength));
// construct a window containing checkboxes
NewWindow("Selection",
BorderBox(top(20),bottom(20),left(20),right(20),
VListBox(
TextBox("Select values:"),
here:cb = CheckBox(levels),
SpacerBox(size(0,20)),
ButtonBox("Create Subset",doSubset())
)
)
);
// define function to perform when button is cliccked
doSubset = function({},{default local},
dt = current data table();
dt << clear select;
// get user selections
selected = here:cb << get selected;
// iterate over each of the selected values
// and select the associated rows
for each( {selection},selected,
rows = dt << select where(:Strength==selection,
current selection("extend")
);
);
// create a subset table
dt << subset(
selected rows(1),
selected columns only(0)
);
dt << clear select;
);
Re: JSL: Usar una casilla de verificación con los niveles de una columnaEste ejemplo ilustra un enfoque que podría funcionar.
Names Default to Here( 1 );
// mock up data set with Strength
dt = New Table( "Strength",
New Column( "Strength", "Character", "Nominal",
Values( {"Intelligent", "Innovative", "Initiative", "Introvert", "Intelligent",
"Innovative", "Initiative", "Introvert", "Intelligent", "Innovative",
"Initiative", "Introvert"} )
)
);
// present user with choices
choice = Associative Array( :Strength ) << Get Keys;
New Window( "Choose Strengths",
Outline Box( "Pick Your Strengths from the Choices Below",
Panel Box( "Strengths",
Check Box( choice,
<< Set Function(
Function( { me, index }, { Default Local },
selection = me << Get Selected;
n = N Items( selection );
dt << Clear Select;
If(
n == 1,
Eval(
Substitute(
Expr( dt << Select Where( :Strength == sss ) ),
Expr( sss ), Name Expr( selection[1] )
)
),
n > 0,
sel expr = Expr( Or() );
For( i = 1, i <= n, i++,
equality = Substitute(
Expr( :Strength == ccc ),
Expr( ccc ), selection[i]
);
Insert Into( sel expr, Name Expr( equality ) );
);
Eval(
Substitute(
Expr( dt << Select Where( eee ) ),
Expr( eee ), Name Expr( sel expr )
)
);
);
);
)
)
)
)
);