¿Cuál es el formato recomendado para especificar nombres de columna para un subconjunto en JSL?Al crear una tabla de subconjuntos en JSL, los nombres de las columnas se pueden especificar simplemente con dos puntos antes del nombre, como en :altura . Sin embargo, si ese nombre tiene un guión ( '-' ) carácter en él, eso no funciona. Pero encuentro que agregar comillas alrededor del nombre hace que funcione. La secuencia de comandos completa a continuación demuestra ambos métodos (aunque Clase grande.jmp no contiene ningún nombre de columna con guiones).
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
scrName = "Col name test script";
dt << New Script( // (use of 'New Script' gets script written to data table.)
scrName,
//---- create subset with StartTime and given FOMs ----
dt = Current Data Table();
dt_subset = dt << Subset(
Output Table( "Subset of Big Class" ),
All Rows,
Columns(
:name, // not in quotes.
:"height", // in quotes -- required if col name contains '-'.
:"weight" // in quotes -- required if col name contains '-'.
);
);
);
// run script to generate graph.
dt << Run Script( scrName );
Y, como se desee, este script se agrega a la tabla JMP con el nombre Script de prueba de nombre de columna . Y ejecutar ese script desde dentro de la tabla JMP (seleccionando su flecha verde) regenera correctamente la tabla de subconjuntos. Hasta ahora tan bueno.
Pero suceden cosas divertidas si quieres entrar y comenzar a editar ese script (haciendo doble clic en el nombre del script y abriendo el editor). En este caso, al ejecutar el script, tal como está, desde el editor de scripts, no se pueden agregar los nombres de las columnas entre comillas a la tabla de subconjuntos.

Mirando el script, parece que las comillas dobles hacen que los nombres de las columnas se traten como nulos como columna especificaciones. (Es muy extraño que la secuencia de comandos se ejecute correctamente desde la flecha verde, pero no desde el editor de secuencias de comandos; ¿quizás se guarda internamente de una manera, pero se muestra en el editor de manera diferente?)
En cualquier caso, mi pregunta es: ¿Hay alguna forma recomendada de especificar nombres de columnas de subconjuntos en general para proteger contra caracteres especiales (como guiones) en los nombres, pero aún poder usar el editor de secuencias de comandos para desarrollar y depurar una secuencia de comandos? (En realidad estoy generando el Nuevo guión código mediante programación, por lo que no sé de antemano si existen caracteres especiales en los nombres). Estoy ejecutando JMP 14.3.0 en Mac OS.
Re: ¿Cuál es el formato recomendado para especificar nombres de columna para un subconjunto en JSL?Sí, eso parece hacer que las cosas funcionen bien. ¡Muchas gracias, Jim!
Para completar, así es como resultó.
Primero, el script que guarda un script en el Clase grande.jmp tabla de datos:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("Height / Weight", Formula(:height / :weight));
dt << New Column("Height-Weight", Formula(:height / :weight)); // using '-'.
scrName = "Col name test script";
dt << New Script( // (use of 'New Script' gets script written to data table.)
scrName,
// create subset.
dt = Current Data Table();
dt_subset = dt << Subset(
Output Table( "Subset of Big Class" ),
All Rows,
Columns(
:name,
:Name("height"),
:Name("weight"),
:Name("Height / Weight"),
:Name("Height-Weight")
);
);
);
// run script to create subset.
dt << Run Script( scrName );Y luego, abriendo el script recién creado en Clase grande.jmp :

Y, a diferencia de antes, cuando ejecuto este script desde esta ventana, se ejecuta como se esperaba.
Re: ¿Cuál es el formato recomendado para especificar nombres de columna para un subconjunto en JSL?La forma correcta de hacer referencia a nombres de columnas que tienen caracteres especiales es con la función :Name()
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt << new column("Height / Weight", formula(:height / :weight));
colList = dt << get column names();
show( colList );
/*
colList = {name, age, sex, height, weight, Name("Height / Weight")};
*/
dt << Distribution( Continuous Distribution( Column( colList[6] ) ) );
show(:Name("height / weight")[1]);