Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se desean<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola, me agarro con esta simple pieza de consulta: quiero, yo JSL, seleccionar algunas filas, que contienen varias piezas diferentes de cadenas. Al igual que, una columna tiene algunos descriptores como '1. muestra de sangre '' 2. muestra de sangre ', 1. muestra de suero 'etc. Quiero escribir en una expresión condicional:
dt >> seleccione dónde ('columna con nombres de muestra' contiene 'sangre' o 'suero').
Refiriéndome al buen viejo SAS, simplemente escribiría:
newset de datos;
establecer oldset
donde (índice ('columna', 'sangre')> = 1 o índice ('columna', 'suero')> = 1);
correr;
¿Cómo hacer esto en JSL?
Saludos poul
Re: Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se deseanHmmm más folklore. Hay sugerencias para esta sintaxis en la guía de scripting, pero nada tan definitivo. Gracias MS!
Re: Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se deseanEl siguiente código es un intento de resumir mi comprensión de la diferencia entre Column () y 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" )
);
Re: Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se deseanCreo que obtuve la sintaxis "como columna" de este foro de discusión hace un tiempo. Es un poco folk-lorish - solo decir columna (dt, "colname") no funcionó en este contexto, pero usando como columna trabajó.
¿Alguien más puede explicar por qué? como columna es necesario?
Re: Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se deseanHola, la respuesta es correcta y me ayuda a hacer lo que quería. En términos de aprender de él, ¿podría explicar por qué está 'como columna'? ¿Es porque 'contiene' funciona solo en columnas? ¿Y el 'como columna' devuelve el tipo de datos correcto?
Me cuesta un poco entender esto.
Saludos
Poul
Re: Uso de Select Where, cuando la condición requiere el uso de 'Contener' para describir qué filas se deseanYa casi estás ahí. Copie el siguiente código en una ventana de script y ejecútelo:
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"));