Scripting JMP a menudo implica el uso de objetos de columna de datos. Es posible que queramos calcular estadísticas para una columna de datos numéricos. Es posible que queramos cambiar una propiedad o atributo de columna. En cualquiera de estos casos, necesitamos una referencia a la columna para poder proporcionarla como argumento. Hay varias formas de obtener o usar una referencia. Desafortunadamente, pueden parecer equivalentes hasta cierto punto hasta que nos sorprendamos. Una teoría científica es comprobable. Una teoría se mantiene hasta que una prueba la invalida. Probemos algunas teorías sobre referencias de columna.
Estoy usando el altura columna de datos en la tabla de datos Big Class de la carpeta de datos de muestra JMP, que es C: \ Archivos de programa \ SAS \ JMPPRO \ 15 \ Samples \ Data en mi caso. Empecemos.
Names Default To Here( 1 );
// open a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Nuestra primera prueba utilizará varias formas diferentes de una columna de referencia para altura .
// use a reference to a data column
sum = Col Sum( :height );
Show( sum );
sum = Col Sum( Column( "height" ) );
Show( sum );
sum = Col Sum( Column( 4 ) );
Show( sum );
sum = Col Sum( :Name( "height" ) );
Show( sum );
sum = Col Sum( As Column( "height" ) );
Show( sum );
OK, que obtuvimos?

Mismo resultado cada vez. Entonces mi teoría es que estas cinco referencias diferentes son equivalentes. Mi primera prueba confirma mi teoría. Pero es solo la primera prueba. Ideemos otra prueba. Primero obtengamos la referencia de columna, almacénela, luego usemos la referencia almacenada para calcular la misma estadística.
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
Tenga en cuenta que no incluí la primera forma de referencia, :altura porque el valor devuelto y almacenado en la expresión col =: altura Está perdido (".")! ¡Ese resultado no está ayudando a mi teoría! ¿Qué obtuvimos con el resto de la prueba?

¡Espera un minuto! No recibí un solo error, pero no obtuve el mismo resultado cada vez. Los dos primeros resultados son correctos pero los dos últimos están equivocados. (Tenga en cuenta que hay 40 filas en altura y la última altura = 70. 40 * 70 = 2800 por cierto.) Realicemos una prueba más de mi teoría. Obtengamos nuevamente una referencia de columna, almacénela y luego úsela para enviar un mensaje.
// get a reference to a data column and then use it
col = Column( "height" );
type = col << Get Data Type;
Show( type );
col = Column( 4 );
type = col << Get Data Type;
Show( type );
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
Esto es lo que obtengo con las dos primeras formas.

Las dos primeras formas parecen funcionar como se esperaba. Probemos por la tercera vía.
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
De esta manera no funcionó.

¿Qué hay de la última manera?
col = As Column( "height" );
type = col << Get Data Type;
Show( type );
Me sale el mismo error que la última vez.

Claramente es hora de revisar mi teoría. (Y tal vez confiar en los desarrolladores de JMP.) Mi teoría es ahora que
- :altura , Columna ("altura") , Columna (4) , : Nombre ("altura") y Como columna ("altura") todo funciona o actúa como una referencia de columna válida.
- Columna ("altura") y Columna (4) son funciones que devuelven una referencia de columna.
- :altura , : Nombre ("altura") y Como columna ("altura") son no funciones que devuelven una referencia de columna.
- Como Columna() es un alias para el colon (" : ") operador de alcance, como se ve en :altura , que devuelven el valor de la fila actual si se usa en una asignación.
Entonces, ¿cuál es mi recomendación?
- Utilizar :altura , Columna ("altura") , Columna (4) , : Nombre ("altura") o Como columna ("altura") como referencia de columna.
- Utilizar Columna ("altura") o Columna (4) funciones para obtener una referencia de columna.
- No utilice :altura , : Nombre ("altura") o Como columna ("altura") para obtener una referencia de columna.
Espero que esta adaptación (¿abominación?) Del método científico haya ayudado a aclarar cómo se pueden usar las referencias de columna en las secuencias de comandos JMP. Espero que sigas las recomendaciones y evites más confusión y frustración.
@markbailey
cuando ejecuta su código
names default to here(1);
// get a reference to a data column and then use it
col = Column( "height" );
sum = Col Sum( col );
Show( sum );
col = Column( 4 );
sum = Col Sum( col );
Show( sum );
col = :Name( "height" );
sum = Col Sum( col );
Show( sum );
col = As Column( "height" );
sum = Col Sum( col );
Show( sum );
No obtengo sus resultados ...... ejecutando JMP 15.1. Lo que obtengo es:
sum = 2502;
sum = 2502;
sum = .;
sum = .;
¿Qué me estoy perdiendo?
¡No creo que te estés perdiendo nada!
Estoy usando JMP Pro 15.1 también. Lo reinicié antes de probar el código. Aparte de eso, no estoy seguro de lo que podría ser diferente entre las experiencias.
¡Gracias por continuar su prueba de mi teoría y su contribución!