Problema
Supponiamo di voler selezionare le righe in una tabella dati che soddisfano più di una condizione. Oppure potresti voler selezionare le righe che soddisfano una delle poche condizioni.
Soluzione
Negli esempi seguenti viene illustrato come utilizzare gli operatori logici AND (&) e OR (|) con il messaggio Seleziona dove per selezionare righe che soddisfano più condizioni.Vedi i commenti incorporati per i dettagli.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
/* Select rows where students are over 13, who are also less than 65 inches tall */
dt << Select Where( :age > 13 & :height < 65 );
Wait( 2 ); // For demonstration purposes
/* Select rows where students are either 12 or 14 years old */
dt << Select Where( :age == 12 | :age == 14 );
@rishdude23
Una formula di colonna esegue nativamente l'iterazione sulle righe.Pertanto, il ciclo For() non è necessario.La funzione Lag() restituirà il valore dell'argomento nella riga precedente.Quindi qualcosa del genere potrebbe funzionare per te.
Formula(
If(
(:age == Lag( :age, 1 )) & (:sex == Lag( :sex, 1 )), "Same age, same gender",
(:age != Lag( :age, 1 )) & (:sex == Lag( :sex, 1 )), "Diff age, same gender",
(:age == Lag( :age, 1 )) & (:sex != Lag( :sex, 1 )), "Same age, diff gender",
(:age != Lag( :age, 1 )) & (:sex != Lag( :sex, 1 )), "Diff age, diff gender"
)
)
Spero che aiuti.
Questa domanda non è correlata all'utilizzo di Select Where() ma piuttosto a una formula di colonna.Domande come questa sono meglio indirizzate all'area Discussioni generali dove molti scripter possono rispondere.
@Wendy_Murphrey
CIAO,
Sto provando a scrivere una nuova colonna nel file jmp Big Data chiamato "AgeSex_comp" con una formula contenente una formula lunga e alcune condizioni. Vorrei confrontare le informazioni su età e sesso della riga precedente con quelle della riga successiva per vedere se sono uguali o diverse. Ecco lo script che ho scritto, non funziona. Qualche idea su dove sbaglio?
dt = current data table();
dt << NewColumn("AgeSex_Comp", Character, Nominal, Formula(
FOR(i=1, i<= N Row(dt), i++,
if((:age[Row(i)] == :age[Row(i+1)]) & (:sex[Row(i)] == :sex[Row(i+1)]),"Same age, same gender",
(:age[Row(i)] != :age[Row(i+1)]) & (:sex[Row(i)] == :sex[Row(i+1)]),"Diff age, same gender",
(:age[Row(i)] == :age[Row(i+1)]) & (:sex[Row(i)] != :sex[Row(i+1)]),"Same age, diff gender",
(:age[Row(i)] != :age[Row(i+1)]) & (:sex[Row(i)] != :sex[Row(i+1)]),"Diff age, diff gender"
)
)
)
)