Falta la tabla de datos: ¿se cerró automáticamente?¿Estoy haciendo algo mal aquí o es un error?Ejecute el siguiente código en JMP 14 o 15, un comando a la vez y al final se abrirán tres tablas.Ejecútelo todo a la vez y una tabla nunca se abre en la GUI o se cierra automáticamente, como lo demuestra un error en la última línea.
// This script should open 2 tables and create a third based on the first two.
// Run script line by line and all three are open at the end. Run all at once
// and the first table, dtDD, is not open when the script is finished.
names default to here(1);
dtDD = Open("$Sample_Data/Big Class.jmp");
dtDDOld = Open("$Sample_Data/Big Class Families.jmp");
if(left(jmpversion(),2) == "15",
dtDDOld << Delete Row( 1 ); //not sure why this didn't delete a row in JMP 14...
,
dtDDOld << select where( row() == 1 );
dtDDOld << delete rows();
);
//find new tags
dtDDNew = New SQL Query(
Version( 130 ),
Connection( "JMP" ),
QueryName( "New Query" ),
Select(
Column( "name", "t1" ),
Column( "age", "t1" ),
Column( "sex", "t1" ),
Column( "name", "t2", Alias( "name 2" ) )
),
From(
Table( dtDD << Get Name, Alias( "t1" ) ),
Table(
dtDDOld << Get Name,
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "name", "t1" ), Column( "name", "t2" ) )
)
)
),
Where(
Custom(
"t2.\!"name\!" is null and (t1.\!"name\!" is not null)",
UI( Custom( Base( "Continuous" ) ) )
)
)
) << Run;
dtDD << bring window to front;
Re: Falta la tabla de datos: ¿se cerró automáticamente?Hasta ahora, solo me he encontrado con ese problema cuando las declaraciones futuras intentan ejecutarse antes de que se complete la primera.En este caso, la primera declaración nunca se completa realmente (los datos se cargan, pero no están disponibles a través de esa variable); o la tabla se cierra posteriormente, lo que no forma parte del guión.Sin embargo, agregar esperar lo soluciona. Veré lo que piensa el soporte de JMP.
Gracias
Re: Falta la tabla de datos: ¿se cerró automáticamente?El intérprete JMP procesa las sentencias JSL una tras otra y no necesariamente espera a que se completen los pasos anteriores en el código, antes de que se procesen las sentencias subsiguientes. Es decir, algunas declaraciones se ejecutan en segundo plano, mientras JSL continúa procesando.Creo que esto es lo que está pasando. Puede obligar al JSL a esperar de varias maneras.Usando un
Espera(0);
o
dtDD << volver a ejecutar fórmulas;
obligará a JSL a hacer una pausa antes de procesar.
Coloqué Wait(0) después de las funciones Open() para Big Class y Big Class Families y también justo antes de
dtDD << trae la ventana al frente;
El resultado fue la correcta ejecución de su JSL.