Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werden<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo, ich greife mit dieser einfachen Abfrage herum: Ich möchte, i JSL, einige Zeilen auswählen, die mehrere verschiedene Zeichenfolgen enthalten. Zum Beispiel hat eine Spalte einige Deskriptoren wie '1. Blutprobe' '2. Blutprobe', 1. Serumprobe' usw. Ich möchte in einem bedingten Ausdruck schreiben:
dt >> select where('Spalte mit Probennamen' enthält „Blut“ oder „Serum“).
In Bezug auf das gute alte SAS würde ich einfach schreiben:
Daten-Newsletter;
alten Satz setzen;
where(index('column','blood')>=1 or index('column','serum')>=1);
Lauf;
Wie macht man das in JSL?
Grüße Poule
Re: Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werdenHmm, mehr Folklore.Es gibt Hinweise auf diese Syntax im Skriptleitfaden, aber nichts so definitives.Danke MS!
Re: Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werdenDer folgende Code ist ein Versuch, mein Verständnis des Unterschieds zwischen Column() und As Column() zusammenzufassen.
//PMroz example table
dt=New Table( "Search Example",
Add Rows( 6 ),
New Column( "Sample Means",
Character,
Set Values(
{"1. blood sample", "2. blood sample", "1. serum sample",
"2. serum sample", "1. cardio sample", "2. cardio sample"}
)
)
);
// Column("X") returns a column reference.
// As Column("X") is equivalent to :X, giving access to the values of Column("X").
// Without an index, :X returns the value of the current row.
//
Row() = 3;
x = As Column( dt, "Sample Means" );
y = dt:Sample Means;
col = Column( dt, "Sample Means" );
Show( x, y, col );
// However, with an index (e.g. :X and Column("X")) both the current row
//and the column reference is bypassed; and both commands yield the same result.
x = dt:Sample Means[1];
y = Column( dt, "Sample Means" )[1];
Show( x, y );
// Hence, the below messages using As Column() Or Column()[] are equivalent.
// The empty square brackets ensures that "Select Where" loops through the value of each row.
//Without them, it would repeatedly look for a string in a column reference which would fail every time.
dt << select where(
Contains( Column( dt, "Sample Means" )[], "blood" ) |
Contains( Column( dt, "Sample Means" )[], "serum" )
);
dt << select where(
Contains( As Column( dt, "Sample Means" ), "blood" ) |
Contains( As Column( dt, "Sample Means" ), "serum" )
);
Re: Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werdenIch glaube, ich habe die Syntax "als Spalte" vor einiger Zeit aus diesem Diskussionsforum bekommen.Es ist ein bisschen volkstümlich - nur so gesagt Spalte (dt, "Spaltenname") hat in diesem Zusammenhang nicht funktioniert, aber mit als Säule hat funktioniert.
Kann jemand anders erklären, warum als Säule wird gebraucht?
Re: Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werdenHallo, die Antwort ist richtig und hilft mir, das zu tun, was ich wollte. Könnten Sie in Bezug auf das Lernen daraus erklären, warum die „als“-Spalte vorhanden ist? Liegt es daran, dass 'contains' nur auf Spalten funktioniert? Und die 'als Spalte' gibt den richtigen Datentyp zurück?
Ich habe ein wenig Probleme, dies zu verstehen.
Grüße
Poul
Re: Verwendung von „Select Where“, wenn die Bedingung die Verwendung von „Contain“ erfordert, um zu beschreiben, welche Zeilen gewünscht werdenDu bist fast da.Kopieren Sie den folgenden Code in ein Skriptfenster und führen Sie ihn aus:
New Table( "Search Example",
Add Rows( 6 ),
New Column( "Sample Means",
Character,
Nominal,
Set Values(
{"1. blood sample", "2. blood sample", "1. serum sample",
"2. serum sample", "1. cardio sample", "2. cardio sample"}
)
)
);
dt = current data table();
dt << select where (contains(as column(dt, "Sample Means"), "blood") |
contains(as column(dt, "Sample Means"), "serum"));