圖形構建器窗口的句柄丟失我使用baseball.jmp腳本來說明我在自己的腳本中看到的問題。 以下按預期運行。 創建單個圖形構建器窗口,並在兩秒鐘後關閉。
Clear Globals();
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Baseball.jmp" );
current data table(dt);
myGraph = Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
);
myRep = myGraph << report;
wait(2);
myGraph << close window;
但是,我正在嘗試在函數中構建圖形構建器表達式,以使其更靈活。 因此,在以下示例中,將myExpr視為構造表達式。 請注意,2秒延遲是如此,我可以弄清楚何時創建窗口。
Clear Globals();
Names Default To Here( 1 );
dt = Open( "C:\Program Files\SAS\JMP\14\Samples\Data\Baseball.jmp" );
current data table(dt);
myExpr = expr(Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
));
myExpr1 = expr(myGraph = eval expr(myExpr));
eval(myExpr1);
wait(2);
myRep = myGraph << report;
wait(2);
myGraph << close window;
發生以下情況對我沒有意義:
- 創建報告圖層時,將打開第二個相同的圖形構建器窗口。
- 創建報表圖層時工作的myGraph句柄在運行myGraph <<關閉窗口時不起作用。 這會打開兩個圖形構建器窗口。
我可以使用myRep <<關閉窗口關閉意外的第二個窗口,但是無法關閉myGraph窗口。 我像往常一樣操縱報告層。
所以我的問題是:
- 為什麼要創建第二個圖形構建器窗口?
- 為什麼我會丟失myGraph句柄?
謝謝,
法案
Re:圖形構建器窗口的句柄丟失您的2個問題最好以相反的順序回答:
- 為什麼要創建第二個圖形構建器窗口?
- 為什麼我會丟失myGraph句柄?
2。如果你看看myGraph的價值是什麼
eval(myExpr1);
您將看到該變量未設置為指向Graph Builder對象,而是僅定義為運行Graph Builder所需的JSL
Graph Builder(Size(531, 448), Show Control Panel(0), Variables(X(:Player), Y(:Batting)), Elements(Points(X, Y, Legend(2))));
您需要做的是將其移動到myExpr表達式。 然後它將指向您想要的Graph Builder對象。
1。顯示兩個窗口的原因是指定時
eval(myExpr1);
它執行myGraph的值,這是一行JSL,用輸出創建一個窗口,然後再次,當解析變量myGraph時
myRep = myGraph << report;
它將再次從變量myGraph執行JSL
下面是我對你的代碼進行重新編寫以完成我認為你想做的事情
Clear Globals();
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Baseball.jmp" );
current data table(dt);
myExpr = expr(myGraph = Graph Builder(
Size( 531, 448 ),
Show Control Panel( 0 ),
Variables( X( :Player ), Y( :Batting ) ),
Elements( Points( X, Y, Legend( 2 ) ) ),
));
myExpr1 = expr(eval expr(myExpr));
eval(myExpr1);
wait(2);
myRep = myGraph << report;
wait(2);
myGraph << close window;
Re:圖形構建器窗口的句柄丟失吉姆,嗨,
謝謝你的解釋。 就在我以為我開始理解JSL表達式的時候....
無論如何構建表達式:expr(圖形構建器(在這裡插入我的東西))比構建探索更容易:expr(myGraph =圖形構建器(在此插入我的東西))
這就是我採用這種方法的原因。
再次感謝,
法案