Error al hacer indicaciones<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Soy nuevo con JMP, y he encontrado buenos ejemplos sobre cómo crear buenas indicaciones en el libro "Jump into JMP scripting".
Aún así, no sé cómo creo un mensaje simple y hago un subconjunto con secuencias de comandos basadas en esos valores que selecciono de ese mensaje.
El mensaje debe 'recopilar' valores de una variable de columna de caracteres "yearm", por ejemplo, me gustaría crear un generador de gráficos basado en valores de año-mes entre [201007, 201012].
Todos los comentarios son bienvenidos. Gracias de antemano por ayudarme con este problema.
Mensaje de error: subíndice no válido (debe ser un número o una lista de números){1} en el acceso o evaluación de 'Subíndice', trimestre[select1 << get]
Aquí hay algo de código:
Resumir( trimestre= Por( Columna( dt, "yearm" ) ) );
nw = Nueva Ventana( "Elegir trimestres",
hb = Panel Box( "Elegir añom",
select1 = Cuadro de lista (trimestre,
dt << Seleccionar donde(
:yearm== trimestre[select1 << get] );
selRows = dt << Obtener filas seleccionadas;
)
),
Cuadro de botones ("OK",
nw << Cerrar ventana;
dt << Seleccionar donde(
:añom== trimestre[seleccionar1 << obtener]
);
/* Las filas seleccionadas se subdividen en una nueva tabla. */
dt << Subconjunto (Nombre de la tabla de salida ("Cuartos elegidos"));
)
);
Re: Error al hacer avisosOk, lo intentaré y responderé cuando mi JMP se actualice a 10. La actualización de medios ha llegado, pero todavía está esperando.
Muchas gracias, eres un usuario tan profesional con esto. Espero que yo también esté aprendiendo algo.
Re: Error al hacer avisos¡Ay! Entonces Contiene () será dolorosamente lento. Sugiero usar el filtro de datos incorporado () como parte del aviso. Será mucho más rápido para tablas grandes.
Pruebe el siguiente ejemplo en JMP 10 (parece que no funciona como en JMP 9). La selección y el subconjunto son casi instantáneos para una tabla de 1 millón de filas (MacPro 8x2,8 GHz).
//Tabla de ejemplo
dt = Nueva tabla ( "Grande" ,
agregar filas ( 1000000 ) ,
Nueva columna ( "cuarto" , nominal , fórmula ( 1 + 10 * Redondo ( Uniforme aleatorio () / 3 , 1 ) ) )
) ;
dt << fórmulas de ejecución () ;
Columna ( "cuarto" ) << eliminar fórmula ;
//Inmediato
d.f. = dt << filtro de datos ( columnas ( : cuarto ) ) ;
rdf = d.f. << informe ;
rdf [ Cuadro de esquema ( 1 )] << establecer título ( "Seleccione uno o más trimestres" ) << adjuntar (
Caja de botones ( "Hacer subconjunto" ,
dt << Subconjunto ( Nombre de la tabla de salida ( "Edades elegidas" ) ) ;
d.f. << cerca , noroeste << cerca
)
) ;
//costomización opcional: rdf[listbox(4)]<Re: Error al hacer avisos
¡Gracias a ambos por sus buenos consejos, se los agradezco! El código ahora funciona bien, pero es un poco lento cuando se usan 1,5 millones de filas.
Re: Error al hacer avisosSí, la función Contiene() es más elegante aquí. Pero recibo un error si selecciono solo un elemento en el ejemplo anterior. Probablemente porque núm_alist [ seleccionar1 << obtener índices seleccionados ] luego devuelva un número en lugar de una lista de números.
Aquí
dt << Selecciona Dónde ( contiene ( seleccionar1 << ser seleccionado , carbonizarse( : edad) ) ) ;
funciona mejor y debería funcionar independientemente de que :age sea carácter o numérico.
Re: Error al hacer avisosHay una construcción conveniente para buscar una columna usando una lista con el contiene función.El siguiente código muestra cómo usarlo:
dt = abierto ( "$sample_data\big class.jmp" ) ;
Resumir ( age_list = Por ( Columna ( dt , "edad" ) ) ) ;
núm_alist = {} ;
para ( i = 1 , i <= artículos ( age_list ) , i ++,
núm_alist [ i ] = número ( age_list [ i ]) ;
) ;
noroeste = Nueva ventana ( "Elige edades" ,
media pensión = caja de paneles ( "Elige edades" ,
seleccionar1 = Cuadro de lista (
age_list ,
dt << Selecciona Dónde ( contiene ( núm_alist [ seleccionar1 << obtener índices seleccionados ] , : edad ) ) ;
selRows = dt << Obtener filas seleccionadas ;
)
) ,
Caja de botones ( "DE ACUERDO" ,
dt << Selecciona Dónde ( contiene ( núm_alist [ seleccionar1 << obtener índices seleccionados ] , : edad ) ) ;
/* Las filas seleccionadas se subdividen en una nueva tabla. */
dt << Subconjunto ( Nombre de la tabla de salida ( "Edades elegidas" ) ) ;
noroeste << Cerrar ventana ;
)
) ;
Re: Error al hacer avisosLa comparación
: año == lista_trimestre [ seleccionar1 << conseguir ]
no funciona para más de un valor porque prueba la igualdad de un valor de celda y una lista. Siempre devolverá falso (no creo que las celdas puedan contener listas).
Hay varias formas de hacer esto. Aquí hay una sugerencia (para la secuencia de comandos del botón Aceptar) donde la selección de filas se basa en una matriz de números de fila obtenidos al recorrer la lista de elementos seleccionados.
Caja de botones ( "DE ACUERDO" ,
filas = [] ;
L = lista_trimestre [ seleccionar1 << Obtener índices seleccionados ] ;
Para ( i = 1 , i <= N elementos ( L ) , i ++,
filas = filas || ( dt << obtener filas donde ( : año == L [ i ] ))
) ;
/* Las filas seleccionadas se subdividen en una nueva tabla. */
dt << Subconjunto ( Filas(filas), Nombre de la tabla de salida ( "Cuartos elegidos" ) ) ;
noroeste << Cerrar ventana ;
)
Re: Error al hacer avisosGracias, ahora funciona bien cuando selecciono solo un valor de la variable, ¿qué debo hacer cuando quiero seleccionar, por ejemplo, tres valores de la variable para los nuevos datos presionando Shitf?
Re: Error al hacer avisosLo que está dentro de los corchetes cuando se usa como índice de una lista debe ser un número (o una lista de números). prueba en su lugar
lista_trimestre [ seleccionar1 << Obtener índices seleccionados ]
Re: Error al hacer avisosGracias por tus consejos.
Todavía se queja de esos [select1 << get] puntos.
Esa variable yearm es una variable de caracteres y no ayudó incluso si hice yearm como una variable numérica.
"subíndice no válido (debe ser un número o una lista de números){1} en el acceso o la evaluación de 'Subíndice', quarter_list[select1 << get]"
Re: Error al hacer avisosNo usaría quarter como variable, ya que también es una función JMP.¿Tal vez quarter_list?También intente poner la declaración de cerrar ventana en último lugar.Código sin probar:
Resumir ( lista_trimestre = Por ( Columna ( dt , "añom" ) ) ) ;
noroeste = Nueva ventana ( "Elegir cuartos" ,
media pensión = caja de paneles ( "Elegir año" ,
seleccionar1 = Cuadro de lista (
lista_trimestre ,
dt << Selecciona Dónde ( : año == lista_trimestre [ seleccionar1 << conseguir ] ) ;
selRows = dt << Obtener filas seleccionadas ;
)
) ,
Caja de botones ( "DE ACUERDO" ,
dt << Selecciona Dónde ( : año == lista_trimestre [ seleccionar1 << conseguir ] ) ;
/* Las filas seleccionadas se subdividen en una nueva tabla. */
dt << Subconjunto ( Nombre de la tabla de salida ( "Cuartos elegidos" ) ) ;
noroeste << Cerrar ventana ;
)
) ;