Seleccionar dónde: es necesario seleccionar de la selección actual en JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Me gustaría seleccionar filas de un conjunto de datos donde tengo múltiples condiciones, pero en lugar de usar una sola instrucción de selección donde con "y", quiero recorrer mis condiciones una a la vez, seleccionando de la selección actual. Esto es muy sencillo en la ventana Seleccionar dónde (use "seleccionar de la selección actual"). ¿Cómo puedo hacer esto en JSL?
Por ejemplo, tengo una lista de nombres de columnas cnames = {"Col1", "Col2", "Col3"} y una lista de valores cspecs = {"a", "b","c} y quiero seleccionar la filas de mi tabla de datos donde Col1 = a, Col2 = by Col3 = c. Recorreré los elementos en cnames y le indicaré que seleccione de la selección actual cada vez. ¡Gracias!
dt<<
seleccione dónde (como columna (cnames) )==cespecificaciones )
Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSLEstoy intentando ejecutar este código que escribí basándose en el script aquí. Las columnas de Diagnóstico son columnas de caracteres y este código no funciona. Básicamente hay tres columnas en la tabla, cada una con códigos ICD. Quiero seleccionar los casos en los que coincide con los códigos ICD. Debe ser cualquier columna que coincida con cualquier código ICD, de ahí el bucle for anidado. El código sin comentar funciona, pero la cadena Seleccionar no tiene comillas y probablemente por eso no funciona. ¿Cómo puedo arreglar esto?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSL
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
msnido,
No estoy seguro de dónde viene la sintaxis que muestras.La Guía de secuencias de comandos JMP 12.1 y la documentación en línea actual tienen el texto correcto, como se muestra arriba.
Gracias.
wendy
Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSL¿Podemos actualizar esto en la Guía de secuencias de comandos?
//Guía de secuencias de comandos página 336
dt = Abrir( "$SAMPLE_DATA\Big Class.jmp" );
dt << Seleccionar dónde( edad < 15 y sexo == "F" );
//o
dt << Seleccione Dónde (edad == 14);
dt << Extender Seleccionar Dónde( sexo == "F" ); //no hace nada
esperar(10);
dt << Seleccionar dónde( sexo == "F", Selección actual ("extender")); //extiende la selección
Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSLJMP 12 ofrece una nueva opción para Seleccionar dónde() que le permite especificar si desea extender, restringir o borrar la selección actual. La sintaxis es la siguiente:
dt << Select Where( condition, );
El siguiente ejemplo demuestra cómo ampliar la selección actual.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
¡Espero que ayude!
wendy
Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSLUn bucle For debería ser tan rápido, si no más rápido, que una cláusula Where, pero "Para cada fila" es terriblemente lento; use For (i=1,i<=NRows(dt),,i++ en su lugar
Re: Seleccionar dónde: es necesario seleccionar de la selección actual en JSLHe estado buscando una solución para prácticamente el mismo problema, y esto realmente es muy ingenioso.No estoy seguro de por qué no pensé en crear una cadena de texto para evaluarla antes...
Seleccionar dónde: es necesario seleccionar de la selección actual en JSL¡Gracias!Se volvió un poco complicado con las columnas numéricas y de caracteres, pero está funcionando y es una gran mejora en términos de velocidad desde donde estaba.
Seleccionar dónde: es necesario seleccionar de la selección actual en JSLProbablemente sea más eficiente hacer SELECCIONAR DÓNDE todos a la vez.Construyo declaraciones de selección dinámicas todo el tiempo y luego uso eval(parse()) para ejecutarlas.Aquí está el ejemplo de MS modificado para seleccionar dónde de una sola vez.
dt = Abierto ( "$ENGLISH_SAMPLE_DATA/Gran Clase.jmp" ) ;
nombres = { "edad" , "altura" , "peso" } ;
especificaciones cspec = { 15 , 62 , 104 } ;
seleccionar_cadena = "" ;
Para ( i = 1 , i <= N artículos ( nombres ) , i ++,
si ( seleccionar_cadena == "" ,
// entonces
seleccionar_cadena = ":" || nombres [ i ] || " == " || carbonizarse ( especificaciones técnicas [ i ]) ;
// demás
,
seleccionar_cadena = seleccionar_cadena || " & " ||
":" || nombres [ i ] || " == " || carbonizarse ( especificaciones cspec [ i ]) ;
) ;
) ;
seleccionar_cadena = "dt << seleccione dónde(" || seleccionar_cadena || ")" ;
evaluar ( analizar gramaticalmente ( seleccionar_cadena )) ;
imprimir ( seleccionar_cadena ) ;
Seleccionar dónde: es necesario seleccionar de la selección actual en JSLGracias, esto ayudará. Hice un "para cada fila" para solucionar este problema y eso acabó con mi rendimiento. Tu sugerencia acelerará las cosas.
Seleccionar dónde: es necesario seleccionar de la selección actual en JSLSe podría usar una lista de filas seleccionadas actualmente como parte de la condición de Seleccionar dónde(). La lista se puede actualizar con cada iteración como en el siguiente ejemplo.
dt = Abierto ( "$ENGLISH_SAMPLE_DATA/Gran Clase.jmp" ) ;
nombres = { "edad" , "altura" , "peso" } ;
especificaciones técnicas = { 15 , 62 , 100 } ;
dt << seleccionar todas las filas ;
Para ( i = 1 , i <= N artículos ( nombres ) , i ++,
filas_seleccionadas = dt << obtener filas seleccionadas ;
dt << seleccione donde (
Y (
Como columna ( nombres [ i ] )[] < especificaciones técnicas [ i ] ,
Contiene ( filas_seleccionadas , Fila () ) > 0 )
)
) ;