グラフビルダーウィンドウへのハンドルの喪失私は自分のスクリプトで見ている問題を説明するためにbaseball.jmpスクリプトを使用しています。 以下は予想通りに実行されます。 単一のグラフビルダーウィンドウが作成され、2秒後に閉じます。
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;
次のことが起こりますが、私には意味がありません。
- レポートレイヤが作成されると、2番目の同一のグラフビルダーウィンドウが開きます。
- レポートレイヤの作成時に機能していたmyGraphハンドルは、myGraph << close windowを実行しても機能しません。 これにより、2つのグラフビルダーウィンドウが開きます。
myRep << close windowで予期しない2番目のウィンドウを閉じることはできますが、myGraphウィンドウを閉じることはできません。 私はいつも通りにレポートレイヤを操作することができます。
だから私の質問は次のとおりです。
- 2番目のグラフビルダーウィンドウが作成されるのはなぜですか?
- myGraphハンドルを失うのはなぜですか?
ありがとう、
ビル
再:グラフビルダーウィンドウへのハンドルの喪失あなたの2つの質問は逆の順序で最もよく答えられます:
- 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式に移動することです。 それはあなたが望むようにグラフビルダーオブジェクトを指すでしょう。
1。2つのウィンドウが表示されるのは、次のように指定したときです。
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;
再:グラフビルダーウィンドウへのハンドルの喪失こんにちはジム、
ご説明ありがとうございます。 ちょうど私がJSL表現を理解し始めていると思ったとき…。
とにかくエクスプレッションを構築するよりも式:expr(グラフビルダー(ここに私のものを挿入する))を構築する方が簡単です。
それが私がそのアプローチを取った理由です。
再度、感謝します、
ビル