나는 JMP 스크립팅에 대한 몇 가지 팁과 트릭을 매우 빠르게 제시했습니다. JMP 스크립터스 클럽 2분기 . 다음은 텍스트 형식(및 조금 더)의 동일한 팁입니다. 내 기술 설명이 정확하지 않을 수 있으며 이해하는 데 전혀 신경 쓰지 않기 때문에 여기저기서 잘못된 용어를 사용할 수 있습니다. 모든 것 (대부분만) JMP와 JSL에서 무슨 일이 일어나고 있는지, 나는 단지 내 코드가 빠르고 잘 작동하기를 원합니다.
Tip1 JMP Script Editor의 Embedded Log 활성화
포함된 로그를 활성화하면 JMP의 스크립트 편집기에서 직접 JMP 로그를 빠르고 쉽게 볼 수 있습니다. 스크립트 편집기의 JMP 기본 설정에서 포함된 로그를 활성화할 수 있습니다. JMP16을 사용하면 포함된 로그의 높이를 변경할 수도 있습니다(저는 개인적으로 25%-30% 사이의 값을 사용합니다).

도움이 될만한 링크
JMP의 텍스트 로그인(jmp.com 도움말)
Tip2 JMP16+의 경우 Enhanced Log 활성화
JMP16에서는 Enhanced Log라는 새로운 기능이 출시되었습니다. 이렇게 하면 JMP에서 대화식으로 수행한 작업을 추적하고 해당 작업에 스크립트를 제공하여 JMP가 스크립트를 작성하도록 하는 것이 더 쉬워집니다.
향상된 로그는 JMP의 기본 설정에서 활성화할 수 있습니다. 또한 캡처된 내용과 향상된 로그가 표시되는 방식을 수정할 수 있습니다.

도움이 될만한 링크
향상된 로그 및 작업 레코더 - JMP 16 및 JMP Pro 16의 새로운 기능
JMP 16의 향상된 로그: 모든 것이 변경됩니다.
향상된 JMP 로그인(jmp.com)
Tip3 변수에서 표현식으로 값 평가하기
이것은 JMP Community에서 상당히 일반적인 주제입니다. 예를 들어 변수의 값이 공식으로 평가되지 않는 이유입니다. 이것은 기본적으로 값이 표현식(변수) "밖에서" 평가되지 않았음을 의미합니다. 다음은 문제와 가능한 솔루션을 보여주는 예입니다(제가 선호하는 방법은 Eval(EvalExpr()) + Expr()).
실시예1 공식
이 예에서는 Eval(EvalExpr())이 있거나 없는 두 개의 열이 생성됩니다. 없는 것은 수식에 변수 이름으로 남습니다.
더보기...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
데이터 테이블과 공식

이 데이터 테이블을 저장하고 다시 열고 새 행을 추가하면 데이터 테이블이 거듭제곱 값을 모르기 때문에 다음과 같은 오류 메시지가 표시됩니다.

이것은 Names Default To Here(1)를 사용하고 있기 때문입니다. 예제 스크립트에 있지만 이 경우 오류는 좋은 것입니다. Names Default To Here(1)를 사용하지 않았다면; 내 스크립트를 시작하려면(참조 추가 팁 ), 전역 네임스페이스에 전원 변수를 추가하고 데이터 테이블은 여전히 동일한 JMP 세션의 전원 값을 알고 있습니다. 이제 내 데이터 테이블이 예상대로 작동한다고 생각할 수 있으며 테이블을 공유하려고 하면 테이블을 공유한 사람이 왜 작동하지 않는지 궁금해 할 것입니다.
예 2 사양 제한 설정
이 예제 스크립트는 Eval(EvalExpr())을 사용하여 값을 열 속성(이 경우 사양 제한)으로 가져오는 방법을 보여줍니다.
더보기...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
예3 << 닫을 때
마지막 예에서 실수로 참조를 덮어쓰지 않도록 스크립트를 보호할 수 있는 방법을 보여 드리겠습니다. 나는 이것에 대해 간략하게 이야기했다. 2022_Q1 MakeOverChallenge: 다양한 방법으로 마우스 클릭에 대한 액션 도전 B
이 스크립트를 실행하고 이변수 창을 닫으면 Big Class 대신 Semiconductor Capability 테이블이 닫히는 것을 알 수 있습니다. 이것은 이변량 창이 닫힐 때 dt가 이미 반도체 기능을 참조하고 있기 때문입니다(예: dt_semi와 같은 다른 변수 이름을 사용할 수도 있음).
더보기...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
그리고 이 코드를 실행하면 올바른 테이블이 닫힙니다. 이는 << On close 문에 대한 Big Class 테이블에 대한 참조를 평가하기 때문입니다.
더보기...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
아마도 유용한 링크
Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입
표현식 처리 함수: 1부 - Expr(), NameExpr(), Eval(), ... 수수께끼
표현식(JMP 도움말, jmp.com)
표현식 함수(JMP 도움말, jmp.com)
추가 팁 Name Default To Here(1)로 스크립트를 시작하십시오.
이렇게 하면 전역 변수로 네임스페이스를 오염시키는 것을 방지하고 향후 문제를 피할 수 있습니다.이것은 사용자 정의 네임스페이스를 사용하더라도 새 스크립트 파일을 시작할 때 항상 하는 일입니다. 전역 네임스페이스에서 우연히 변수를 생성하는 것을 방지하기 위해 이 작업을 수행합니다.
아마도 유용한 링크
고급 범위 지정 및 네임스페이스(JMP 도움말, jmp.com) (아주 잘 읽었습니다. 여러 페이지가 있으므로 대부분 확인하십시오!)
이름 확인 규칙(JMP 도움말, jmp.com)
효율성 및 재현성을 위한 필수 스크립팅: 적은 작업으로 더 많은 작업 수행(2019-US-TUT-290)
에 관해서
Names default to here (1);
사용하시는 분들도 봤습니다
Clear globals (1);
또한 스크립트 시작 부분에.
왜 그것이 유용한지 이해할 수 있다고 생각합니다. 그러나 그것에 대한 귀하의 의견은 무엇입니까?
@리셀 , 개인적으로 Clear Globals(1)는 실행 중인 다른 스크립트를 방해할 수 있으므로 사용하지 않습니다. 스크립트 변수의 범위를 로컬로 지정하거나 자체 네임스페이스로 지정하는 것이 훨씬 안전합니다.
안녕 @리셀 ,
나는 동의한다 @DonMcCormack , 전역 변수를 지우지 않는 것이 좋습니다. 그렇게 하고 싶지 않은 이유의 한 가지 예는 스크립트에 "회상" 기능이 있는 경우일 수 있습니다. 여기서 회상 버튼을 클릭한 다음 역할이나 값으로 캐스팅한 모든 변수 또는 열을 클릭할 수 있습니다. JMP 플랫폼에서 사용하기 위해 입력한 항목은 자동으로 교체되며 다시 돌아가 수동으로 수행할 필요가 없습니다. 스크립트 시작 부분에 clear globals(1)가 있는 경우 스크립트를 실행할 때마다 호출 변수가 메모리에서 지워져 호출 기능을 효과적으로 사용할 수 없게 됩니다.
DS