La actualización del cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Estoy tratando de corregir "pecados" anteriores en un script que escribí actualizándolo con referencias unánimes, es decir, de modo que el script se refiera a la tabla a la que (quiero) indicarle, aunque otra tabla pueda ser la actual ( o una tabla "interferente"). Intenté reconstruir el problema a continuación.
Names Default To Here( 1 );
// this is the table i want to work with
dt = New Table( "Target table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "C"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"X", "Y", "Z"} ),
Set Display Width( 45 )
),
New Column( "NumericRight",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3] ),
Set Display Width( 78 )
),
New Column( "NumericAlso",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
dt2 = New Table( "Interfering table", invisible,
Add Rows( 3 ),
New Column( "Name_1",
Character( 1 ),
"Nominal",
Set Values( {"D", "E", "F"} ),
Set Display Width( 45 )
),
New Column( "Name_2",
Character( 1 ),
"Nominal",
Set Values( {"U", "V", "W"} ),
Set Display Width( 45 )
),
New Column( "NumericInterference",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 5, 6] )
),
New Column( "MoreNumeric",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 8, 9] )
)
);
// get lists
lstName_1 = Associative Array( dt:Name_1 ) << Get Keys;
lstName_2 = Associative Array( dt:Name_2 ) << Get Keys;
colList = dt << Get Column Names( "Numeric" );
// window with radio buttons & col list box
New Window( "Select values",
Show Menu( 0 ),
Show Toolbars( 0 ),
Border Box( Top( 0 ), Bottom( 20 ), Left( 20 ), Right( 10 ),
H List Box(
Panel Box( "Name_1",
Radio Box(
Eval List( lstName_1 )
)
),
Panel Box( "Name_2",
Radio Box(
Eval List( lstName_2 )
)
),
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
)
)
);
lo que quiero ver :

Lo que veo invariablemente si mi "tabla de destino" no es la tabla actual :

Lo que me confunde completamente es que cuando cambio el nombre de dt2:Interferencia numérica a dt2: NuméricoDerecha , obtengo este resultado :

¿Por qué dt2 no permite que mi script haga el trabajo que quiero? ¿Por qué el cambio de nombre de una columna en dt2 afecta lo que ingresa en el cuadro de lista de columnas? He probado algunas variaciones de mover el listacol variable y también intenté envolverla en Lista de evaluación() , sin "suerte".
Buscando nuevamente en la comunidad encontré esto Necesita ayuda para completar el cuadro de lista de columnas. Si hay otra solución, gracias por hacérmelo saber. Alternativamente, ¿es así como debe ser y, de ser así, cuál es el significado de esto?
Automatización y secuencias de comandosRe: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Hola,
A primera vista, sólo necesita utilizar la siguiente sintaxis para obtener la lista de columnas numéricas de la tabla dt:
clb = Col List Box(dt, all, << Set Data Type ("numeric"))
Además, no está claro cómo podría funcionar la línea: "clb << append (collist)" ya que Obtener nombres de columnas devuelve una lista de nombres y no de columnas.
Finalmente, no creo que puedas usar el cuadro de lista de columnas en varias tablas (corrígeme si me equivoco aquí).
Mejor,
TS
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Parece que el cuadro de lista de columnas simplemente acepta columnas de la tabla de datos que estaba "actual" cuando se creó el cuadro de lista de columnas.
Si dt2 no contiene la columna respectiva, no se puede agregar.
Supongo
current data table(dt);
// window with radio buttons & col list box
New Window( "Select values",
¿No hay opción para ti?
Si no, entonces usa
clb = Col List Box( Data Table(dt) )
para especificar qué tabla de datos se debe utilizar para el cuadro de lista col:

Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Gracias @Thierry_S , Lo intentaré mañana. Sin embargo, si se comenta dt2 fuera del script, el cuadro de lista Col se actualiza como se esperaba, por lo que definitivamente funciona (consulte también la primera captura de pantalla en mi publicación original).
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?@hogi , gracias, mañana también probaré esto y te haré saber el resultado.
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?@Thierry_S , extraña y lamentablemente, esto no funciona. En el guión que publiqué inicialmente, hice los siguientes cambios según su propuesta:
// this part was revised ...
Panel Box( "Numeric Columns",
clb = Col List Box( )
),
clb << Append( colList ); // making me cry ...
// ... to look like this.
Panel Box( "Numeric Columns",
clb = Col List Box( dt, all, << Set Data Type ( "numeric" ) ) // this adds the numeric columns from dt2. Why???
)
Esto dio el siguiente resultado, es decir, las columnas numéricas de dt2 se agregaron al cuadro de lista de columnas, mientras que lo que quiero son las columnas numéricas de dt.

Aún así, un aprendizaje muy útil para mí. ¡Gracias!
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?
@Ressel escribió:
@Thierry_S , extraña y lamentablemente, esto no funciona.</CODE></P><HR /></BLOCKQUOTE><P> </P><P>El código es casi correcto, pero hay que utilizarlo.</P><PRE><CODE class=" language-jsl">clb = Col List Box(Data Table(dt), all, << Set Data Type ("numeric"))
también puedes usar
clb = Col List Box(all, << Set Data Type ("numeric"), Data Table(dt))pero no debes olvidar el "indicador" *) Tabla de datos().
Como indiqué en mi publicación anterior (a continuación), de acuerdo con la guía de secuencias de comandos, tiene que ser

Al igual que con los nombres de las columnas, no importa si usas el nombre o la referencia.
Pero tiene que ser Tabla de Datos (nombre o referencia de la tabla) y no solo el argumento sin indicador.
Esto es un poco engañoso, porque a menudo la tabla de datos (nombre) se puede reemplazar con una referencia de tabla de datos 
Pero aquí, la tabla de datos es un argumento opcional y, por lo tanto, tiene que haber un indicador *) tal que Jmp sepa qué es.
*) ¿Cuál es el nombre oficial de "indicador"?
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?@hogi , ¡Estoy asombrado! Gracias por su ayuda.
- Por supuesto, convertir la tabla deseada en la tabla actual funciona. De alguna manera, todavía quería evitar esto.
- Pero también funciona el siguiente código.
Panel Box( "Numeric Columns",
clb = Col List Box(Data Table( dt ))
),
clb << Append( colList ); // this is still required, which I find interesting, since I thought the clb was already added above via Col List Box(...)
Por el contrario, lo siguiente no funciona. Más bien, agrega las columnas numéricas de dt2, lo cual no tiene sentido para mí.
Panel Box( "Numeric Columns",
clb = Col List Box(dt, all, << Set Data Type ( "numeric" )) // adds numeric columns from dt2 :(...
),
/*clb << Append( colList );*/ // doesn't matter whether this is commented out or not
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Hola @Ressel .
Debo admitir que también me desconcertó un poco 
Deberían haber usado
Col List Box(<FROM data="https://community.jmp.com/" table=""></FROM>
como argumento opcional... o cualquier otra cosa, pero diferente de Tabla de datos ("nombre de la tabla")
- un poco engañoso, ¿verdad?
Después de años como usuario de Jmp, uno se siente demasiado tentado a reemplazar toda la expresión con dt - y así olvidarse del "indicador".
Por otro lado, es bueno que se pueda usar la referencia de la tabla en lugar del nombre de la tabla como argumento de la tabla de datos 
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?La presencia y ayuda de usuarios como usted es lo que ayuda a muchas personas, incluido yo, a desarrollar scripts y otras habilidades relacionadas con JMP. Esto es amabilidad y se agradece mucho.
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?@Thierry_S , @hogi para tu información - https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Gracias por el enlace, @David_Burnham ¡El blog contiene una bonita colección de gemas!
Acabo de leer la parte sobre referencias de columnas en la plataforma de distribución.
Interesante: según el índice de secuencias de comandos es:

Como no hay " < >" alrededor del argumento Column(), uno podría pensar que Columna() es el único argumento no opcional
- ¿Utiliza el Columna() ¿Función para generar una referencia de columna?
Pero en realidad es lo mismo que Tabla de datos() en la discusión anterior:
Columna() es un indicador por un opcional argumento:
- se puede colocar en todas partes y se puede omitir
- acepta una columna o una lista de >=1 columnas (como referencia o nombre) - señal clara de que esta NO es la función columna()
Encontré otra entrada en el Índice de secuencias de comandos donde los puntos antes y después del argumento Columnas() indican que el argumento es opcional.
Aquí, son Columnas [plural], como en la GUI. Y es otro alias. Ambos ayudan a no distraerse con la función. Columna() .

// aliasDistribution(Column("height"));
Distribution(:height); // doesn't work<BR /><BR />Distribution(Columns("name", :sex)); // accepts >=1 arguments; column references and names<BR />Distribution(Columns({"name", :sex})); // accepts lists
<BR />Distribution(Continuous Distribution(Column( :height ))); // Distribution can be used without a Column() argument<BR />
Distribution("dummy 1st entry", Columns("height")); // Column at non-first position -> works<BR /><BR />Distribution("hello"); // not necessary to provide a meaningful (first) argument<BR /><BR />Distribution(Columns("name")); // alias<BR />Distribution(Y("name"));
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?La Guía de secuencias de comandos proporciona alguna explicación sobre la terminología. Guía de secuencias de comandos > Introducción a la escritura de secuencias de comandos JSL > Terminología JSL
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?
Entonces la terminología es llamado argumentos
- y los argumentos con nombre siempre son opcionales - con y sin < > en el índice de secuencias de comandos 
Desafortunadamente, no se indica explícitamente:
entonces el nombre oficial del "indicador" de un argumento con nombre es " nombre "?
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?¿Nombre oficial? ¿Indicador?
Guía de secuencias de comandos > Bloques de construcción JSL > Reglas de sintaxis JSL > Reglas JSL para nombres
En JSL, un nombre es simplemente algo para llamar a un elemento. Cuando asignas el valor numérico 3 a una variable en la expresión un = 3 , a es un nombre.
Re: Actualizar el cuadro de lista de columnas usando la lista almacenada en la variable no funciona como se esperaba. ¿Es así como debe ser?Esto es lo que me desconcierta.
Aprendimos que el Columnas("altura") en
Distribution(Columns("height"));es un (opcional) argumento nombrado.
Entonces que es columnas en Distribución(Columnas("altura")); ?
Desde el punto de vista gramatical, podría ser el "nombre", que se le dio al argumento nombrado.
Pero esto chocará con la definición estándar de nombre en JSL. (comparar: como nombre(x))
Supongo que no soy el primero que hace esta pregunta, y supongo que hay un nombre oficial para el nombre de un parámetro con nombre.
Pero no tuve la suerte de encontrarlo en la documentación.
@Mark_Bailey ?