Cómo usar columnlist para apilar muchas columnas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos, quiero leer los nombres de las columnas y guardarlos como una lista de columnas... usando esta lista, ¿puedo apilar estas múltiples columnas en un solo comando en lugar de apilarlas manualmente como el código que se muestra a continuación?
dt_L5 << Pila(
columnas (
:Nombre( "MISC_L5_Test230_2(1)" ),
:Nombre( "MISC_L5_Test230_2(2)" ),
:Nombre( "MISC_L5_Test230_2(3)" ),
:Nombre( "MISC_L5_Test230_2(4)" ),
:Nombre( "MISC_L5_Test230_2(5)" ),
:Nombre( "MISC_L5_Test230_2(6)" ),
:Nombre( "MISC_L5_Test230_2(7)" ),
:Nombre( "MISC_L5_Test230_2(8)" ),
.
.
.
.
:Nombre( "MISC_L5_Test230_2(125)" )
),
Columna de etiqueta de origen ("Etiqueta"),
Columna de datos apilados ("Datos"),
Tabla de salida( "L5")
);
Quiero hacer algo como esto:
clist=dt_L5<
ncols = N elementos (clista);
dt_L5 << Pila(
columnas (
para(i=1,i<=ncols,i++,
lista_nombre = lista ;
/* ¿CÓMO DEBO LLAMAR AL " :Nombre("lista_nombre") " aquí ?? */
);
Columna de etiqueta de origen ("Etiqueta"),
Columna de datos apilados ("Datos"),
Tabla de salida( "L5")
);
Re: Cómo usar columnlist para apilar muchas columnas
Hola,
¿Tu guión final se parece a este?
Borrar globales (); /* borra la memoria residente de ejecuciones anteriores*/
/*Abre tu archivo*/
dt=abierto(
Seleccionar archivo(
"Seleccione un archivo *.csv",
Obtener directorio actual(),
{"Todos los archivos JMP|jmp;jsl;jrn;csv;txt", "Todos los archivos|*"}
)
);
esperar(0);
nc_dt = N Col(); /*obtiene el número de columnas en un archivo*/
esperar(0);
clist = dt < ncols = N elementos (clista);
esperar(0);
listat={};
para(i=2,i<=ncols,i++,
insertar en (tlista,clista );
);
esperar(0);
dt2 << Pila(
columnas (eval (tlist)),
Columna de etiqueta de origen ("Etiqueta"),
Columna de datos apilados ("Datos"),
Tabla de salida( "DT5")
);
Re: Cómo usar columnlist para apilar muchas columnas¡Excelente! Gracias MS... Tengo JMP8.0 tal vez ese sea el problema.
Re: Cómo usar columnlist para apilar muchas columnasDe acuerdo. Para mí también funciona sin eval(). JMP 9.0.3 para Mac.
Esto incluso funciona, es decir, crear la lista dentro del argumento columnas(). Puede resultar conveniente si no necesita el parámetro más adelante en el script. Sin embargo, indicar claramente las variables hace que el código sea más fácil de leer y depurar.
dt1_L0 << pila (
columnas ( dt1_L0 << obtener nombres de columnas ) ,
Columna de etiqueta de origen ( "Etiqueta" ) ,
Columna de datos apilados ( "Datos" ) ,
Tabla de salida ( "L5" )
) ;
Re: Cómo usar columnlist para apilar muchas columnasUna búsqueda en este foro me dirigió a la respuesta... Se debe utilizar eval(lista).
colista = dt1_L5 << obtener nombres de columnas ;
dt1_L0 << pila (
columnas ( evaluar ( colista ) ) ,
Columna de etiqueta de origen ( "Etiqueta" ) ,
Columna de datos apilados ( "Datos" ) ,
Tabla de salida ( "L5" )
) ;
¡Gracias por tu apoyo!
Re: Cómo usar columnlist para apilar muchas columnas¡Gracias una vez más! ... Después del comando de pila, aparece el siguiente mensaje en la ventana de registro
"Columna no encontrada en acceso o evaluación de 'Mal Argumento'
Vacío()"
Y no veo ningún resultado de tabla apilada... :-s ¡Realmente aprecio tu ayuda!
Cómo usar columnlist para apilar muchas columnasO condicionalmente así:
lista t = {} ;
para ( i = 1 , i <= ncols , i ++,
si ( i > 3 ,
insertar en ( lista t , colista [ i ]) ;
) ;
) ;
o sin condición pero con una inicial modificada i :
lista t = {} ;
para ( i =4 , i <= ncols , i ++,
insertar en ( lista t , colista [ i ]) ;
) ;
Re: Cómo usar columnlist para apilar muchas columnasAlgo como esto ?? ....
colista = dt1_L5 << obtener nombres de columnas ;
/*La intención aquí es guardar una nueva lista eliminando los primeros 3 de la lista anterior*/
ncols = N elementos (colista);
para(i=1;i<=ncols;i++,
si(i>3,
listat=colista ;
);
);
dt1_L0 << pila (
columnas ( ( lista t ) ) ,
Columna de etiqueta de origen ( "Etiqueta" ) ,
Columna de datos apilados ( "Datos" ) ,
Tabla de salida ( "L5" )
) ;
Ni siquiera sé si la afirmación "si" aquí es correcta. ... por favor disculpen mi ignorancia
Cómo usar columnlist para apilar muchas columnasHola MS,
Gracias por la rápida respuesta. Soy un novato en JSL, por lo que no conozco el idioma. Es bueno saber que la pila acepta la lista como argumento.
¿Puedo ampliar aún más la pregunta y preguntar... cómo podemos seleccionar sólo unas pocas columnas para apilarlas de la lista? Por ejemplo, no quiero apilar las primeras 3 columnas. Para este propósito, ¿puedo crear una nueva lista que almacene los nombres de las columnas requeridas (elimine los primeros 3 nombres de columnas de la lista)?
Sí, encontré una solución para mi entrada anterior, así que la eliminé.
¡Muchas gracias!
Re: Cómo usar columnlist para apilar muchas columnasStack toma una lista como argumento, por lo que aquí se puede hacer de una manera mucho más sencilla.
colista = dt1_L5 << obtener nombres de columnas ;
dt1_L0 << pila (
columnas ( ( colista ) ) ,
Columna de etiqueta de origen ( "Etiqueta" ) ,
Columna de datos apilados ( "Datos" ) ,
Tabla de salida ( "L5" )
) ;
Evite bucles for dentro de los comandos de la plataforma. Por cierto, intenté enviar una respuesta a su pregunta anterior, pero se eliminó antes de presionar "Agregar respuesta". Probablemente ya hayas encontrado una solución, pero esta es mi opinión al respecto. Nuevamente, es posible que los bucles for dentro de las plataformas no siempre funcionen, ya que es posible que algunos comandos no evalúen el argumento (por ejemplo, se requiere una cadena entre comillas).
lista mensual = { 4 , 5 , 7 , 9 , 11 , 12 } ;
viento = Nueva ventana ( "bivariado" ,
dt1_L0 << bivariado ( Y ( : Datos ) , X ( : Precio ) , Por ( : MES ) )
) ;
Para ( i = 1 , i <= N artículos ( lista mensual ) , i ++,
viento [ 1 , i , caja de marco ( 1 )] << { Tamaño del marco ( 633 , 249 ) ,
Leyenda de fila ( : PISOS ,
Tema de color ( "JMP predeterminado" ) ,
Tema de marcador ( "Estándar" ) ,
)}
) ;