Ciao,
Sto cercando di imparare come passare un vettore alla clausola where del comando data filter. Sto cercando di capirlo perché non riesco a ottenere una clausola meno che uguale nella clausola where to work. Comunque il passaggio Where (: columnname == {1,2}), funziona. Sembra che dovrebbe essere semplice ma finisce per dimostrare di essere bacato e non riesco a capire la sintassi corretta. Codice di esempio mostrato di seguito.
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)
)
);Qualche idea?
Grazie per le risposte. Il tipo di colonna passa a continuo era la soluzione più semplice per me, ma gli esempi sono utili per vedere altri esempi di codice. Grazie ancora!
Penso che tu stia correndo verso un problema di tipo di modellazione.
La colonna suspect_count è nominale, giusto? Dal momento che il suo nominativo dà un elenco di valori funziona. (è un elenco perché è racchiuso tra parentesi graffe.) Se la colonna fosse numerica continua, lo script funzionerebbe.
Dai un'occhiata a questo pezzetto di script.
L'età è numerica nominale e nel mio filtro ho scelto 12 e 14 (parentesi graffe, colonna delimitata). Ma poi il peso è continuo numerico, quindi la disuguaglianza, "<= 100", funziona. Un modo rapido per ordinare la sintassi consiste nel creare manualmente il filtro, quindi dal menu del triangolo rosso nel filtro di riga, salvare lo script negli appunti o nella finestra di 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 sulla riga commentata ("//"): questo è solo per mostrare che il valore può essere qualcosa dalla colonna (o qualsiasi cosa che valuta)
Quindi, per la domanda leggermente più lunga, "Come faccio a passare i valori in una lista e poi a usare la lista nel filtro?" (per favore perdonare l'hevy parafrasando)
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 )
)
);
Questo script potrebbe essere un po 'più facile da leggere in una finestra di script JMP.
Il problema è che la colonna su cui stai filtrando non è una colonna continua, ma piuttosto una colonna ordinale o nominale. Quindi, la diversa metodologia per il filtro.