¿Cómo seleccionar filas según múltiples criterios?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Estoy escribiendo un script para crear un subconjunto de una tabla de datos. Siguiendo el ejemplo de codificación de las guías de secuencias de comandos, puedo seleccionar según un criterio:
para cada fila(Selected(Rowstate())=(name=="KATIE"));
¿Cómo puedo generalizar esto para seleccionar tanto a KATIE como a LOUISE?
Esto no funciona:
para cada fila(Selected(Rowstate())=(name=="KATIE","LOUISE"));
Entonces, ¿cuál es la sintaxis para esto?
Saludos
Pablo
Re: ¿Cómo seleccionar filas según varios criterios?Gracias,
Solía subconjuntos de cada criterio en una tabla individual y luego los combinaba todos.
Feliz año nuevo !Re: ¿Cómo seleccionar filas según varios criterios?¿Es esto lo que está tratando de lograr, encontrar todas las coincidencias encontradas en la lista llamada "name_list" y luego generarlas en una tabla de datos subconjuntos?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
name_list = {"Clay", "Alice", "AMY"};
For( i = 1, i <= N Items( name_list ), i++,
i_name = Uppercase( name_list[i] );
dt << select where( :name == i_name, current selection( "extend" ) );
);
dtSub = dt << subset( selected rows( 1 ), selected columns( 0 ) );Re: ¿Cómo seleccionar filas según varios criterios?Hola señorita,
gracias por tu guión.
Me pregunto si hay una manera de manejar dinámicamente la lista de nombres y aún poder subconjuntos de la lista.
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
name_list={"arcilla","Alicia","AMY", ...};
para(i=1,i<=nitems(lista_nombre),i++,
i_name=lista_nombres[i];
dt<
);
dt<
Re: ¿Cómo seleccionar filas según múltiples criterios?Esta sintaxis podría ser un poco más legible.Puede utilizar la barra vertical para OR y el signo comercial para AND:
dt = abierto ( "$sample_data\Gran Clase.jmp" ) ;
dt << seleccione donde (( contiene ( : nombre , "UN LAZO" ) | contiene ( : nombre , "OBER" ))
& contiene ( : sexo , "F" )) ;
Re: ¿Cómo seleccionar filas según múltiples criterios?Casi llegamos. El And() debe incluir ambos argumentos; Para que And() sea verdadero, ambos argumentos deben ser verdaderos.
Esto debería funcionar:
Por cada fila ( Seleccionado ( Estado de la fila () ) = Y ( O ( contiene ( : nombre , "UN LAZO" ) , contiene ( : nombre , "OBER" )) , contiene ( : sexo , "F" ))) ;
Re: ¿Cómo seleccionar filas según varios criterios?Hola, estas respuestas fueron realmente útiles. Ahora, si quiero agregar una condición para el valor en otra columna, digamos que quiero seleccionar nombre="KATIE" y "ROBERT" (o incluso mejor, que contenga "ATIE") Y sexo="F". Entonces tendría que combinar la condición Or- con una condición and.
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
Por cada fila ( Seleccionado ( Estado de la fila () ) = O ( contiene ( : nombre , "UN LAZO" ) , contiene ( : nombre , "OBER" )) Y (contiene(:sexo, "F" ))) ;
Ya hice algo como esto, pero no tuve éxito.
Saludos
Pablo
(PD: Obviamente usé mucho Base SAS. Ahora intento implementar selecciones en tablas de esta manera. Gracias por la ayuda.)
Re: ¿Cómo seleccionar filas según varios criterios?Si hay muchas cadenas que coincidir, sería tentador usar una lista en lugar de construir una cláusula OR() larga. Sin embargo, Contain() no puede dejar de buscar subcadenas en una lista (de cadenas). Entonces es necesario recorrer la lista. He aquí un ejemplo:
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
lista de nombres = { "UN LAZO" , "ISE" , "CLY" , "WWW" } ;
norte = N artículos ( lista de nombres ) ;
Por cada fila (
Para ( i = 1 , i <= norte , i ++,
Si ( ( s_flag = Contiene ( : nombre [] , lista de nombres [ i ] )) > 0 ,
Romper ()
)
) ;
Seleccionado ( Estado de la fila () ) = s_flag ;
) ;
Re: ¿Cómo seleccionar filas según múltiples criterios?Mismo principio:
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
Por cada fila ( Seleccionado ( Estado de la fila () ) = O ( contiene ( : nombre , "UN LAZO" ) , contiene ( : nombre , "ISE" )) ) ;
// O alternativamente
dt << Seleccione donde ( O ( contiene ( : nombre , "UN LAZO" ) , contiene ( : nombre , "ISE" )) ) ;
Re: ¿Cómo seleccionar filas según múltiples criterios?Pero, ¿qué pasa si quiero seguir usando 'Contiene' para hacer coincidir las cadenas internamente en parte de las cadenas? ¿Como "ATIE" y "ISE"? Saludos Poul
Re: ¿Cómo seleccionar filas según varios criterios?Utilice O():
dt = Abierto ( "$SAMPLE_DATA/Gran Clase.jmp" ) ;
Por cada fila ( Seleccionado ( Estado de la fila () ) = O ( nombre == "KATI" , nombre == "LUISA" ) ) ;
// O alternativamente
dt << Seleccione donde ( O ( nombre == "KATI" , nombre == "LUISA" ) ) ;