Hola,
Estoy tratando de aprender cómo pasar un vector a la cláusula where del comando de filtro de datos. Estoy tratando de resolver esto porque parece que no puedo obtener una declaración menos que igual en la cláusula where para trabajar. Sin embargo, al pasar Where (: columnname == {1,2}), funciona. Parece que debería ser simple, pero termina demostrando ser un buggy y no puedo entender la sintaxis correcta. Código de ejemplo que se muestra a continuación.
GE_Table = Current Data Table();
GE_Table << DataFilter(Add Filter(
columns(:SUSPECT_COUNT,:SYMPTOM_COUNT),
Where( :SYMPTOM_COUNT == 1),
Where( :SUSPECT_COUNT <=2 ), //this doesn't work but Where( :SUSPECT_COUNT == {1,2}) does...?????
show window(0)
)
);¿Algunas ideas?
Gracias por las respuestas. El cambio de tipo de columna a continuo fue la solución más fácil para mí, pero los ejemplos son útiles para ver más ejemplos de código. ¡Gracias de nuevo!
Creo que estás corriendo en un problema de tipo de modelado.
La columna suspect_count es nominal, ¿verdad? Desde su nominal le da una lista de valores que funciona. (Es una lista porque está entre paréntesis.) Si la columna fuera numérica continua, su script funcionaría.
Echa un vistazo a este bit de guión.
La edad es numérica nominal y, en mi filtro, seleccioné 12 y 14 (rizos, delimitados por columnas). Pero entonces el peso es numérico continuo, por lo que la desigualdad, "<= 100", funciona. Una forma rápida de ordenar la sintaxis es construir manualmente el filtro, y luego, desde el menú del triángulo rojo en el filtro de la fila, guarde el script en el portapapeles o en la ventana del script.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
//Where( :weight >= col minimum(:weight) & :weight <= 100 ),
Where( :weight <= 100 ),
Where( :age == {12, 14} ),
Display( :age, Blocks Display )
)
);
nota en la línea comentada ("//"): esto es solo para mostrar que el valor puede ser algo de la columna (o cualquier cosa que se evalúe)
Entonces, para la pregunta un poco más larga, "¿Cómo paso valores en una lista y luego la uso en la lista del filtro?" (por favor perdonen las parafraseando a Hevy)
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( age_levels = By( :age) );
show(age_levels);
parse(age_levels[2]);//second thing in the list of age_levels, returns a number
age_list={};//empty list
insert into(age_list,parse(age_levels[2]));//second thing in the list of age_levels, "parse" returns a number not a quoted string
insert into(age_list,parse(age_levels[4]));//add 4th thing
show(age_list);//look at the log to see the values
dt << Data Filter(
Add Filter(
columns( :weight, :age ),
Where( :weight <= 100 ),
Where( :age == age_list ),//note the list gets evaluated here
Display( :age, Blocks Display )
)
);
Este script puede ser un poco más fácil de leer en una ventana de script JMP.
El problema es que la columna en la que está filtrando no es una columna continua, sino una columna ordinal o nominal. Así, la diferente metodología para el filtro.