secuencias de comandos JMP a menudo implica el uso de objetos de columna de datos. Podríamos querer calcular estadísticas para una columna de datos numéricos. Es posible que deseemos cambiar un atributo o propiedad de columna. En cualquiera de estos casos, necesitamos una referencia a la columna para poder proporcionarla como argumento. Hay varias formas de obtener o utilizar una referencia. Desafortunadamente, pueden parecer equivalentes hasta cierto punto hasta que nos sorprendemos. Una teoría científica es comprobable. Una teoría se sostiene hasta que una prueba la invalida. Probemos algunas teorías sobre las referencias de columnas.
estoy usando el altura columna de datos en la tabla de datos de Big Class de la carpeta de datos de muestra de 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 usará varias formas diferentes de referencia de columna 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 );
Bien, ¿qué obtuvimos?

Mismo resultado cada vez. Así que mi teoría es que estas cinco referencias diferentes son equivalentes. Mi primera prueba confirma mi teoría. Pero es sólo la primera prueba. Diseñemos otra prueba. Primero obtengamos la referencia de la columna, almacenémosla y 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 una referencia, :altura porque el valor devuelto y almacenado en la expresión columna = :altura Está perdido (".")! ¡Ese resultado no está ayudando a mi teoría! ¿Qué obtuvimos con el resto de la prueba?

¡Espera un minuto! No obtuve un solo error, pero no obtuve el mismo resultado cada vez. Los dos primeros resultados son correctos, pero los dos últimos son incorrectos. Realicemos una prueba más de mi teoría. Obtengamos nuevamente una referencia de columna, almacenémosla y luego la usaremos 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 la tercera vía.
col = :Name( "height" );
type = col << Get Data Type;
Show( type );
De esta manera no funcionó.

¿Qué pasa con la última forma?
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 para confiar en los desarrolladores de JMP). Mi teoría ahora es que
- :altura , Columna ("altura") , columna( 4 ) , :Nombre( "altura") , y Como columna ("altura") todos funcionan o actúan 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 los dos puntos (" : ") operador de alcance, como se ve en :altura , que devuelven el valor de la fila actual si se usan en una asignación.
Entonces, ¿cuál es mi recomendación?
- Usar :altura , Columna ("altura") , columna( 4 ) , :Nombre( "altura") , o Como columna ("altura") como referencia de columna.
- Usar 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 el scripting JMP. Espero que sigas las recomendaciones y evites más confusiones y frustraciones.
¡No creo que te falte nada!
Pude probar el código nuevamente y descubrí que había un error de tiempo de ejecución en mi primer intento. Obtengo el mismo resultado que tú. Edité mi artículo para reflejar el resultado correcto. Yo no cambio la historia.
@Mark_Bailey
Ejecuté su código y recibí diferentes resultados.Cuando corro:
// 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 );
Yo obtengo:
sum = 2502;
sum = 2502;
sum = .;
sum = .;