图形构建器窗口的句柄丢失我使用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 =图形构建器(在此插入我的东西))
这就是我采用这种方法的原因。
再次感谢,
法案