Bedingte Auswahl „Wo“.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe den folgenden JSL-Code, um Daten auszuwählen und zu unterteilen, bei denen es weniger als 25 Zeilen pro „Tag“ gibt, um die Teilmenge zu speichern und die Teilmenge aus dem Hauptarbeitsdatensatz zu entfernen. Das funktioniert gut, wenn es Tags mit weniger als 25 Zeilen gibt, aber ich muss es stabil haben und funktionieren, wenn es keine Tags mit weniger als 25 Zeilen gibt – in diesem Fall sollte es die Zeilen 4–6 ignorieren und zum Speichern mit Zeile 7 fortfahren Der Hauptarbeitsdatensatz mit einem neuen Namen. Wie kann ich das erreichen?
Vielen Dank
1 Open( "data.jmp" );
2 dt=current data table() << Summary( Group( :tag ) );
3 Data Table( "data By (tag)" ) << Select Where( :N Rows < 25) << Sort( By( :N Rows ), Order( Ascending ), Output Table Name("summary_of_small_n"));
4 Data Table( "data" ) << Subset(( Selected Rows ), Output Table Name("sub_small_n"));
5 Datentabelle( "sub_small_n" ) << save("sub_small_n.jmp");
6 Datentabelle( "summary_of_small_n" ) << save("summary_of_small_n.jmp");
7 Datentabelle( "data" ) << Zeilen löschen << save("data_less_small_n.jmp");
Betreff: Bedingte Auswahl „Wo“.Nach etwas mehr Fummelei scheint das Folgende für mich zu funktionieren. Danke für die Hilfe.
Open( "data.jmp" );
dt = aktuelle Datentabelle() << Summary( Group( :tag ) );
Datentabelle( "data By (tag)" ) << Select Where( :N Rows < 25) << Sort( By( :N Rows ), Order( Ascending ), Output Table Name("summary_of_small_n_tag"));
Datentabelle( "summary_of_small_n_tag" ) << save("summary_of_small_n_tag.jmp");
num_selected = nrows(dt << ausgewählte Zeilen abrufen);
if(num_selected(dt > 0),
// Wenn die Bedingung erfüllt ist, tun Sie dies ...
Data Table( "data" ) << Subset(( Selected Rows ), Output Table Name("sub_small_n"));
Datentabelle( "sub_small_n" ) << save("sub_small_n.jmp");
Datentabelle( "data" ) << Zeilen löschen << save("data_less_small_n.jmp");
,
// Sonst mach das...
Datentabelle( "data" ) << save(" data_less_small_n.jmp ");
);
Betreff: Bedingte Auswahl „Wo“.@rijking
Nur basierend auf Punkt (a) – würde es vielleicht funktionieren, eine Umkehrauswahl auszuprobieren? Hast du es versucht ?Wenn es nicht funktioniert, können Sie bitte eine Beispieldatentabelle aus der Beispieldatenbibliothek vorschlagen, die zu Ihrem Problem passt, damit ich versuchen kann, das Problem zu reproduzieren und zu helfen?
Am besten
Uday
Betreff: Bedingte Auswahl „Wo“.Ian, danke. Das funktioniert nicht ganz so:
a) Ich muss mich auf die Anzahl beziehen ausgewählt Zeilen (und nicht die Gesamtzahl der Zeilen, von denen ich weiß, dass NRow funktioniert) – weil dt2 die Gesamtzahl der Zeilen für alle Tags zusammenfasst, nicht nur die < 25.
b) Wenn ich mich auf ausgewählte Zeilen in dt2 beziehe, muss dieser meiner Meinung nach > 0 statt > 24 sein – da dt2 die Gesamtzahl der Zeilen für alle Tags zusammenfasst, bin ich also an allen ausgewählten Zeilen interessiert (auch wenn es nur eine gibt). ; das würde ein Tag zusammenfassen, das in weniger als 25 Zeilen im zugrunde liegenden dt erscheint).
Für weitere Vorschläge wäre ich sehr dankbar. Danke schön.
Ian@JMP wrote:You need to use the 'NRow()' function in combination with an 'If()' expression. Something like:Open( "data.jmp" );dt = current data table() << Summary( Group( :tag ) );dt2 = Data Table( "data By (tag)" ) << Select Where( :N Rows < 25) << Sort( By( :N Rows ), Order( Ascending ), Output Table Name("summary_of_small_n"));if( NRow(dt2 > 24, // If the condition is satisfied, do this . . . Data Table( "data" ) << Subset(( Selected Rows ), Output Table Name("sub_small_n")); Data Table( "sub_small_n" ) << save("sub_small_n.jmp"); Data Table( "summary_of_small_n" ) << save("summary_of_small_n.jmp") , // Else do this . . . Data Table( "data" ) << delete rows << save("data_less_small_n.jmp"); );
Betreff: Bedingte Auswahl „Wo“.Sie müssen die Funktion „NRow()“ in Kombination mit einem Ausdruck „If()“ verwenden. Etwas wie:
Offen ( „data.jmp“ ) ;
dt = aktuelle Datentabelle () << Zusammenfassung ( Gruppe ( : Etikett ) ) ;
dt2 = Datentabelle ( „Daten von (Tag)“ ) << Wählen Sie „Wo“. ( : N Zeilen < 25 ) << Sortieren ( Von ( : N Zeilen ) , Befehl ( Aufsteigend ) , Name der Ausgabetabelle ( „summary_of_small_n“ )) ;
Wenn (
NRow ( dt2 > 24 ,
// Wenn die Bedingung erfüllt ist, führen Sie dies aus. . .
Datentabelle ( "Daten" ) << Teilmenge (( Ausgewählte Zeilen ) , Name der Ausgabetabelle ( „sub_small_n“ )) ;
Datentabelle ( „sub_small_n“ ) << speichern ( „sub_small_n.jmp“ ) ;
Datentabelle ( „summary_of_small_n“ ) << speichern ( „summary_of_small_n.jmp“ )
,
// Sonst mach das. . .
Datentabelle ( "Daten" ) << Zeilen löschen << speichern ( „data_less_small_n.jmp“ ) ;
) ;