我在這裡做錯了什麼還是這是一個錯誤?在 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。