그래프 빌더 창에 대한 핸들 손실나는 내 자신의 스크립트에서보고있는 문제를 설명하기 위해 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을 생성 된 표현식으로 간주합니다. 두 번째 지연은 창을 만들 때 알아낼 수 있습니다.
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 핸들을 잃어 버리는 이유는 무엇입니까?
감사,
계산서
다시 : 그래프 빌더 창 핸들 손실귀하의 2 가지 질문은 역순으로 가장 잘 답변됩니다 :
- 왜 두 번째 그래프 빌더 창이 생성됩니까?
- myGraph 핸들을 잃어 버리는 이유는 무엇입니까?
2. myGraph의 가치가 무엇인지 살펴 본다면
eval(myExpr1);
변수가 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. 두 개의 창을 표시하는 이유는 지정하면
eval(myExpr1);
myGraph의 값을 실행합니다. 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 (그래프 빌더 (여기에 물건을 삽입하십시오))은 expession을 빌드하는 것보다 쉽습니다 : expr (myGraph = 그래프 빌더 (여기에 내 물건을 넣으십시오))
그래서 내가 그 접근법을 사용했다.
다시 한번 감사드립니다.
계산서