Hallo,
Ich versuche zu lernen, wie man einen Vektor an die where-Klausel des Datenfilterbefehls übergibt. Ich versuche das herauszufinden, weil ich in der where-Klausel anscheinend keine Aussage bekommen kann, die kleiner als gleich ist. Die Übergabe von Where (: columnname == {1,2}) funktioniert jedoch. Es scheint, als sollte es einfach sein, aber es erweist sich als fehlerhaft und ich kann die richtige Syntax nicht herausfinden. Beispielcode siehe unten.
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)
)
);Irgendwelche Ideen?
Danke für die Antworten. Die Umstellung des Spaltentyps auf Continuous war für mich die einfachste Lösung, aber die Beispiele sind hilfreich, um weitere Codebeispiele anzuzeigen. Danke noch einmal!
Ich glaube, Sie stoßen auf ein Modellierungsproblem.
Die suspect_count-Spalte ist nominal, richtig? Da es nominal ist, funktioniert es mit einer Liste von Werten. (Es ist eine Liste, weil sie in geschweiften Klammern steht.) Wenn die Spalte numerisch durchgehend ist, funktioniert Ihr Skript.
Sehen Sie sich dieses Skript an.
Das Alter ist nominell und in meinem Filter habe ich 12 und 14 ausgewählt (geschweifte Klammern, spaltenbegrenzt). Aber dann ist das Gewicht numerisch stetig, so dass die Ungleichung "<= 100" funktioniert. Eine schnelle Möglichkeit, die Syntax zu sortieren, besteht darin, den Filter manuell zu erstellen und das Skript über das rote Dreieck im Zeilenfilter in der Zwischenablage oder im Skriptfenster zu speichern.
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 )
)
);
Anmerkung in der kommentierten Zeile ("//"): Dies soll nur zeigen, dass der Wert etwas aus der Spalte sein kann (oder irgendetwas anderes, das ausgewertet wird).
Also für die etwas längere Frage: "Wie übergebe ich Werte in eine Liste und verwende dann die Liste im Filter?" (Bitte verzeihen Sie die hevy Paraphrasierung)
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 )
)
);
Dieses Skript ist in einem JMP-Skriptfenster möglicherweise etwas einfacher zu lesen.
Das Problem ist, dass es sich bei der Spalte, nach der Sie filtern, nicht um eine fortlaufende Spalte handelt, sondern um eine ordinale oder nominale Spalte. Also die unterschiedliche Methodik für den Filter.