我在这里做错了什么还是这是一个错误?在 JMP 14 或 15 中一次运行一个命令,最后打开三个表。一次运行它,一个表要么永远不会在 GUI 中打开,要么自动关闭,最后一行的错误证明了这一点。
// 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;
到目前为止,我只是在未来的语句尝试在第一个语句完成之前执行时遇到了这个问题。在这种情况下,第一条语句要么根本没有真正完成(数据已加载,只是无法通过该变量获得);或者该表随后被关闭,这不是脚本的一部分。添加等待确实可以解决它。 我会看看 JMP 支持人员的想法。
谢谢
JMP 解释器一个接一个地处理 JSL 语句,并且不一定要等待代码中的上述步骤完成,然后才能处理后续语句。 也就是说,一些语句在后台运行,因为 JSL 继续处理。我相信这就是正在发生的事情。 您可以通过多种方式强制 JSL 等待。用一个
等待(0);
或者
dtDD << 重新运行公式;
将强制 JSL 在处理之前暂停。
我在 Big Class 和 Big Class Families 的 Open() 函数之后以及在
dtDD << 将窗口置于前面;
结果是正确执行了您的 JSL。