llamar a una columna refiriéndose a la variableUn completo novato aquí,
no pude encontrar la solución en publicaciones anteriores,
He creado una variable que contiene un nombre de columna existente. Quiero crear una nueva columna, donde se suman los datos de otras dos columnas (llamando a las columnas por variables). el uso de variable es para uso posterior en un bucle for.
¡Gracias por ayudar!
para el siguiente código:
dt = Current Data Table();
columnname1 = Column( dt, 1 ) << Get Name;
columnname2 = Column( dt, 2 ) << Get Name;
dt << New Column( "new_" || columnname1, Numeric , continuous, formula(column(dt, columnname1)+column(dt, columnname2)));
Obtuve el siguiente error:
Columna new_Column 1 2 Fórmula interrumpida
No se puede convertir el argumento en un número [o matriz] 1 vez En las filas: 2 Operación: Sumar, Columna (dt, nombre de columna1) + /*###*/Columna (dt, nombre de columna2) /*###*/
Los errores de evaluación de fórmulas se han ignorado
Columna( "nueva_Columna 1 2" )
Modelado Estadístico AvanzadoAcceso a los datosFusión y limpieza de datosExploración y visualización de datosRe: llamar a una columna haciendo referencia a la variable@txnelson tiene toda la razón en esto.El método que sugerí fue una opción perezosa y, en retrospectiva, no es un enfoque que recomendaría.Si solo desea una columna con valores correctos, puede hacer un cálculo en un bucle y no molestarse con una fórmula; si la fórmula es importante para usted, debe verificar que su secuencia de comandos haya codificado correctamente la fórmula; no es suficiente para que los números aparezcan correctos.Las variables de la secuencia de comandos no persistirán más allá de la vida útil de la secuencia de comandos, por lo que la fórmula debe incluir correctamente las referencias de columna; esto se logra mediante el uso de técnicas de sustitución de expresiones como la ilustrada por Jim.
Re: llamar a una columna haciendo referencia a la variableGracias por su rápida respuesta. ¡funciona!
Re: llamar a una columna haciendo referencia a la variablePuede hacer que funcione, con
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula(
As Column( dt, columnname1 ) + As Column( dt, columnname2 )
)
);
Sin embargo, hay un problema potencial con esto.La fórmula almacenada es:

Esta fórmula seguirá funcionando, siempre y cuando su sesión JMP
- Tiene definidas las variables, dt, columnname1 y columnname2.¿Qué sucede si guarda la tabla de datos, apaga JMP y luego mañana ingresa e inicia JMP y abre la tabla de datos?La fórmula no encontrará esas variables y la fórmula fallará.
- Dentro de la sesión, las variables, dt, columnname1 y columnname2, no cambian su valor.Entonces, si crea esta columna, y más adelante en su secuencia de comandos, cambia el valor de la variable columnname1, dado que las columnas de fórmula en una tabla de datos JMP son dinámicas, la fórmula se volverá a ejecutar cuando se realicen cambios en la tabla de datos, JMP utilizará el nuevo valor de la variable y creará nuevos valores para la columna de fórmula.
Lo que realmente debe hacer es usar un método que cree la sintaxis JSL real para la fórmula.En el ejemplo anterior, lo que realmente desea es que la fórmula sea
:height + :weight
El JSL a continuación es una forma de hacer esto.Utiliza la función Substitute() para implantar los nombres de columna reales en la fórmula.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula( __c1__ + __c2__ )
)
),
Expr( __c1__ ), Parse( ":" || columnname1 ),
Expr( __c2__ ), Parse( ":" || columnname2 )
)
);Re: llamar a una columna haciendo referencia a la variableYa ha creado variables que hacen referencia a las columnas.Puede usarlos en su fórmula, pero necesita usar la función AsColumn:
formula( AsColumn(columnname1) + AsColumn(columnname2) )
Re: llamar a una columna haciendo referencia a una variableSólo para futuros lectores de esta pregunta:
Utilicé el código anterior para pasar nombres de columnas de cadena a fórmulas pero tuve problemas con el uso de
Parse(":" || column_name)El análisis es vulnerable a nombres de columnas impares, ya que los nombres de columnas como "a - b" se interpretarían como la columna "a" menos la variable "b".
En lugar de usar
As Name(columnname)
que soluciona este problema.