Uso di Select Where, quando la condizione richiede l'uso di 'Contain' per descrivere quali righe sono desiderate<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salve, mi cimento con questa semplice parte di interrogazione: voglio, io JSL, selezionare alcune righe, che contengono diversi pezzi di stringhe. Ad esempio, una colonna ha alcuni descrittori come '1. campione di sangue' '2. campione di sangue', 1. campione di siero' ecc. Voglio in un'espressione condizionale scrivere:
dt >> select where('colonna con nomi di esempio' contiene 'sangue' o 'siero').
Riferendomi al buon vecchio SAS scriverei semplicemente:
newset di dati;
impostare oldset;
where(index('colonna','sangue')>=1 o index('colonna','siero')>=1);
correre;
Come farlo in JSL?
Saluti Pol
Oggetto: utilizzo di Seleziona dove, quando la condizione richiede l'uso di "Contiene" per descrivere quali righe sono desiderateHmmm altro folklore.Ci sono accenni a questa sintassi nella guida allo scripting, ma niente di così definitivo.Grazie SM!
Oggetto: utilizzo di Seleziona dove, quando la condizione richiede l'uso di "Contiene" per descrivere quali righe sono desiderateIl codice seguente è un tentativo di riassumere la mia comprensione della differenza tra Column() e As Column().
//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" )
);
Oggetto: utilizzo di Seleziona dove, quando la condizione richiede l'uso di "Contiene" per descrivere quali righe sono desideratePenso di aver ottenuto la sintassi "come colonna" da questo forum di discussione qualche tempo fa.È un po' folcloristico, solo per dire colonna(dt, "colnome") non ha funzionato in questo contesto, ma utilizzando come colonna lavorato.
Qualcun altro può spiegare perché come colonna è necessario?
Oggetto: utilizzo di Seleziona dove, quando la condizione richiede l'uso di "Contiene" per descrivere quali righe sono desiderateCiao, la risposta è corretta e mi aiuta a fare quello che volevo. In termini di apprendimento da esso, potresti spiegare perché c'è la "colonna as"? È perché "contiene" funziona solo su colonne? E la "colonna as" restituisce il tipo di dati corretto?
Ho un piccolo problema a capirlo.
Saluti
Pol
Oggetto: utilizzo di Seleziona dove, quando la condizione richiede l'uso di "Contiene" per descrivere quali righe sono desiderateCi sei quasi.Copia il seguente codice in una finestra di script ed eseguilo:
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"));