seleccione la instrucción where para la comparación de valores de columnaRegresé a JSL después de un largo descanso y me sentí oxidado.
No se puede obtener una declaración de selección donde funcione. Estoy seguro de que es bastante simple.
Estoy tratando de seleccionar filas comparando un valor con valores en otras dos columnas.
dt << select where( :Col1 > :Col2 & :Col1< :Col3);
Col1 es un carácter (a propósito) porque debe usarse más y Col2, Col3 son columnas numéricas.
¿Qué está mal?
Incluso intenté hacer esto desde la GUI, pero parece que no funciona.
Gracias
Re: seleccione la instrucción where para la comparación de valores de columnaHola @ENTHU ,
Como lo menciona @mzwald , las comparaciones >, <, etc. requieren valores numéricos para trabajar.
Una idea para evitar esto para su :col1 (que es nominal), es usar una codificación numérica, como 0, 1, 2, 3, 4 para las diferentes clases de caracteres (si puede), y luego usar la propiedad de columna " etiquetas de valor" para poner los personajes en el rol de etiqueta. De esa manera, puede realizar las comparaciones, pero al mismo tiempo, cuando grafica o muestra el contenido de la columna, mostrará las etiquetas de valor en su lugar.
Lo probé con una tabla simple de 3 columnas y el mismo código de comparación que escribiste. La columna 1 tiene valores de 0 a 4, la columna 2 es aleatoria normal (0) y la columna 3 es aleatoria uniforme (-1,1). En este caso, seleccionó la fila 6.
¡Espero que esto ayude!,
SD

Re: seleccione la instrucción where para la comparación de valores de columnaHola @ENTHU ,
Puedo ver algunas cosas que necesitarás abordar. Supongo que está tratando de hacer referencia a estas columnas por su aparición en la tabla de datos. Si es así, deberá ajustar la sintaxis para hacer la referencia de esa manera (es decir, :Column(#)[] ). Además, si su primera columna es un tipo de datos de carácter, deberá envolver la referencia a esa columna en la función num() para convertir las cadenas en un valor numérico para hacer la comparación. Aquí hay un código para que comiences:
dt = current data table();
dt << select where( num(:Column(1)[]) > :Column(2)[] & num(:Column(1)[]) < :Column(3)[]);
¡Espero que esto ayude!
@Julian
Re: seleccione la instrucción where para la comparación de valores de columnaPara comparaciones , todas las columnas deben ser numéricas.