¿Cómo puedo hacer una tabla de subconjuntos condicionales sin llamar directamente al nombre de una columna?Las primeras 3 líneas de este script crean una nueva tabla de datos donde las alturas son inferiores a 60. Esta parte funciona bien.
Para la función que me gustaría desarrollar, me gustaría hacer referencia a una columna de una manera diferente que usar: height.
He intentado 4 formas diferentes de hacer referencia a la columna, pero ninguna de ellas funciona. He usado la función de columna y obtengo la función de referencia de columna (ver más abajo).
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));¿Hay alguna razón por la que no funcionan?
¿Alguna sugerencia sobre una solución?
Gracias por tu ayuda.
Re: ¿Cómo puedo hacer una tabla de subconjuntos condicionales sin llamar directamente al nombre de una columna?Intente agregar corchetes vacíos después del paréntesis de cierre de la función Column (). Me gusta esto:
Column("height")[] < 60
¿Ayuda este cambio?
Re: ¿Cómo puedo hacer una tabla de subconjuntos condicionales sin llamar directamente al nombre de una columna?Gracias, esto hizo exactamente lo que quería.
¿Puedo preguntar por qué funciona esto?
He usado la función de columna muchas veces sin usar corchetes.
¿Qué tiene de diferente este caso? ¿Cuál es la regla a seguir?Re: ¿Cómo puedo hacer una tabla de subconjuntos condicionales sin llamar directamente al nombre de una columna?Parece extraño, ¿no?
Se trata de contexto. Por ejemplo, puede usar esto en una fórmula de columna:
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
O puede usarlo en la función For Each Row () para lograr lo mismo en un script:
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
El contexto de la fórmula de la columna y la iteración anterior es tal que JMP está configurando implícitamente la función Row () para usted. Entonces JMP usa esa información para determinar dónde obtener o almacenar el valor (es decir, qué fila). Ese no es el contexto del caso general aquí:
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
La tabla de datos no utiliza implícitamente el número de fila actual cuando intenta evaluar la comparación. Lo fuerza agregando el operador de subíndice vacío, [].