Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich möchte Zeilen aus einem Datensatz auswählen, in dem ich mehrere Bedingungen habe, aber anstatt eine einzelne Select-Where-Anweisung mit „und“ zu verwenden, möchte ich meine Bedingungen einzeln durchlaufen und aus der aktuellen Auswahl auswählen. Dies ist im Auswahlfenster sehr einfach (verwenden Sie „Aus aktueller Auswahl auswählen“). Wie kann ich das in JSL machen?
Ich habe zum Beispiel eine Liste mit Spaltennamen, cnames = {"Col1", "Col2", "Col3"} und eine Liste mit Werten, cspecs = {"a", "b", "c}, und ich möchte die auswählen Zeilen aus meiner Datentabelle, wobei Col1 = a, Col2 = b und Col3 = c. Ich werde die Elemente in cnames durchlaufen und ihm sagen, dass er jedes Mal aus der aktuellen Auswahl auswählen soll. Danke!
dt<<
Wählen Sie where(als Spalte(cnames )==cspecs )
Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenIch versuche, diesen Code, den ich geschrieben habe, basierend auf dem Skript hier zu bearbeiten. Die Diagnosespalten sind Zeichenspalten und dieser Code funktioniert nicht. Grundsätzlich gibt es in der Tabelle drei Spalten mit jeweils ICD-Codes. Ich möchte die Fälle auswählen, in denen es mit ICD-Codes übereinstimmt. Es sollte sich um eine beliebige Spalte handeln, die mit einem beliebigen ICD-Code übereinstimmt, daher die verschachtelte for-Schleife. Der unkommentierte Code funktioniert, aber Select string hat kein Anführungszeichen und wahrscheinlich funktioniert er deshalb nicht. Wie kann ich das beheben?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählen
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
msharp,
Ich bin nicht sicher, woher die von Ihnen angezeigte Syntax stammt.Der JMP 12.1 Scripting Guide und die aktuelle Online-Dokumentation enthalten den korrekten Text, wie oben gezeigt.
Danke.
Wendy
Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenKönnen wir dies im Scripting Guide aktualisieren?
//Scripting Guide Seite 336
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << Select Where( Alter < 15 & Geschlecht == "F" );
//oder
dt << Select Where( age == 14 );
dt << Extend Select Where( sex == "F" ); //tut nichts
warte(10);
dt << Select Where( sex == "F", Current Selection ("extend")); //erweitert select
Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenJMP 12 bietet eine neue Option für Select Where(), mit der Sie angeben können, ob die aktuelle Auswahl erweitert, eingeschränkt oder gelöscht werden soll. Die Syntax lautet wie folgt:
dt << Select Where( condition, );
Das folgende Beispiel zeigt die Erweiterung der aktuellen Auswahl.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
Hoffentlich hilft das!
Wendy
Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenEine For-Schleife sollte genauso schnell, wenn nicht sogar schneller sein als eine where-Klausel – aber „For Each Row“ ist furchtbar langsam – verwenden Sie stattdessen For (i=1,i<=NRows(dt),,i++
Betreff: Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenIch habe nach einer Lösung für fast genau dasselbe Problem gesucht, und diese ist wirklich sehr clever.Ich bin mir nicht sicher, warum ich vorher nicht daran gedacht habe, eine Textzeichenfolge zu erstellen, um sie auszuwerten ...
Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenDanke schön!Mit Zeichen- und Zahlenspalten war es etwas schwierig, aber es funktioniert und ist eine große Geschwindigkeitsverbesserung im Vergleich zu meiner bisherigen Arbeit.
Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenEs ist wahrscheinlich effizienter, SELECT WHERE auf einmal auszuführen.Ich erstelle ständig dynamische Select-Anweisungen und verwende dann eval(parse()), um sie auszuführen.Hier ist das MS-Beispiel, das so geändert wurde, dass die Auswahl des Orts auf einmal erfolgt.
dt = Offen ( „$ENGLISH_SAMPLE_DATA/Big Class.jmp“ ) ;
cnames = { "Alter" , "Höhe" , "Gewicht" } ;
cspecs = { 15 , 62 , 104 } ;
select_string = „“ ;
Für ( ich = 1 , ich <= N Artikel ( cnames ) , ich ++,
Wenn ( select_string == „“ ,
// Dann
select_string = :: || cnames [ ich ] || " == " || verkohlen ( cspecs [ ich ]) ;
// anders
,
select_string = select_string || " & " ||
:: || cnames [ ich ] || " == " || verkohlen ( cspecs [ ich ]) ;
) ;
) ;
select_string = „dt << select where(“ || select_string || ")" ;
evalu ( analysieren ( select_string )) ;
drucken ( select_string ) ;
Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenVielen Dank – das wird helfen. Ich hatte ein „für jede Zeile“ gemacht, um dies zu umgehen, und das hat meine Leistung beeinträchtigt. Ihr Vorschlag wird die Sache beschleunigen.
Wo auswählen: Sie müssen aus der aktuellen Auswahl in JSL auswählenMan könnte eine Liste der aktuell ausgewählten Zeilen als Teil der Bedingung von Select Where() verwenden. Die Liste kann bei jeder Iteration aktualisiert werden, wie im folgenden Beispiel gezeigt.
dt = Offen ( „$ENGLISH_SAMPLE_DATA/Big Class.jmp“ ) ;
cnames = { "Alter" , "Höhe" , "Gewicht" } ;
cspecs = { 15 , 62 , 100 } ;
dt << Wählen Sie alle Zeilen aus ;
Für ( ich = 1 , ich <= N Artikel ( cnames ) , ich ++,
ausgewählte_Zeilen = dt << Holen Sie sich ausgewählte Zeilen ;
dt << Wählen Sie wo aus (
Und (
Als Spalte ( cnames [ ich ] )[] < cspecs [ ich ] ,
Enthält ( ausgewählte_Zeilen , Reihe () ) > 0 )
)
) ;