Wählen Sie Zeilen basierend auf mehreren Bedingungen aus
Problem
Angenommen, Sie möchten Zeilen in einer Datentabelle auswählen, die mehr als eine Bedingung erfüllen. Oder vielleicht möchten Sie die Zeilen auswählen, die eine von mehreren Bedingungen erfüllen.
Lösung
Die folgenden Beispiele veranschaulichen, wie Sie die logischen Operatoren AND (&) und OR (|) mit der Select Where-Nachricht verwenden können, um Zeilen auszuwählen, die mehrere Bedingungen erfüllen.Einzelheiten finden Sie in den eingebetteten Kommentaren.
/* 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 );
Betreff: Zeilen basierend auf mehreren Bedingungen auswählen@rishdude23
Eine Spaltenformel iteriert nativ über die Zeilen.Daher ist die For()-Schleife unnötig.Die Funktion Lag() gibt den Wert des Arguments in der vorherigen Zeile zurück.So etwas könnte also für Sie funktionieren.
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"
)
)
Hoffentlich hilft das.
Diese Frage bezieht sich nicht auf die Verwendung von Select Where(), sondern auf eine Spaltenformel.Fragen wie diese richten Sie besser an den allgemeinen Diskussionsbereich, wo viele Drehbuchautoren antworten können.
Betreff: Zeilen basierend auf mehreren Bedingungen auswählen@Wendy_Murphrey
Hallo,
Ich versuche, eine neue Spalte mit dem Namen „AgeSex_comp“ in die Big Data-JMP-Datei zu schreiben, mit einer Formel, die eine for long und einige Bedingungen enthält. Ich möchte die Alters- und Geschlechtsinformationen der vorherigen Zeile mit denen der nächsten Zeile vergleichen, um festzustellen, ob sie gleich oder unterschiedlich sind. Hier ist das Skript, das ich geschrieben habe, es funktioniert nicht. Irgendwelche Ideen, wo ich falsch liege?
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"
)
)
)
)