JMP 스크립팅에 대한 몇 가지 팁과 요령을 매우 빠르게 제시했습니다. JMP 스크립터 클럽 Q2 .
기술적인 설명이 올바르지 않을 수 있으며 이해하는 데 전혀 관심이 없기 때문에 여기저기서 잘못된 용어를 사용할 수 있습니다. 모든 것 (대부분만) JMP와 JSL에서 무슨 일이 일어나고 있는지, 저는 제 코드가 빠르고 원활하게 작동하기를 원합니다.
Tip1 JMP 스크립트 편집기의 포함된 로그 활성화
포함된 로그를 활성화하면 JMP의 스크립트 편집기에서 직접 JMP 로그를 쉽고 빠르게 볼 수 있습니다. 스크립트 편집기의 JMP 기본 설정에서 포함된 로그를 활성화할 수 있습니다. 또한 JMP16을 사용하면 포함된 로그의 높이를 변경할 수 있습니다(저는 개인적으로 25%-30% 사이의 값을 사용합니다).

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

도움이 될 수 있는 링크
향상된 로그 및 동작 기록기 - JMP 16 및 JMP Pro 16의 새로운 기능
JMP 16의 향상된 로그인: 이것은 모든 것을 바꿉니다.
향상된 JMP 로그인(jmp.com)
Tip3 변수에서 표현식으로 값 평가하기
이것은 JMP 커뮤니티에서 매우 일반적인 주제입니다. 예를 들어 변수의 값이 수식으로 평가되지 않는 이유입니다. 이는 기본적으로 값이 표현식(변수)에서 "외부"로 평가되지 않았음을 의미합니다. 다음은 문제와 가능한 해결책을 보여주는 예입니다(제가 선호하는 방법은 Eval(EvalExpr()) + Expr())입니다.
예1 공식
이 예에서는 Eval(EvalExpr())이 있거나 없는 두 개의 열이 생성됩니다. 없는 것은 수식의 변수 이름으로 남습니다.
더보기...
데이터 표 및 수식(수식이 어떻게 생겼는지, x에서 3개의 값이 어떻게 되었는지 기록해 둡니다(이제 4를 제곱합니다))

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

이것은 Names Default To Here(1)를 사용하고 있기 때문입니다. 예제 스크립트에 있지만 이 경우 오류는 좋은 것입니다. Names Default To Here(1)를 사용하지 않은 경우; 내 스크립트를 시작하려면(참조 추가 팁 ), 전원 변수를 전역 네임스페이스에 추가하고 데이터 테이블은 여전히 동일한 JMP 세션에서 전원 값을 알고 있습니다. 이제 내 데이터 테이블이 예상대로 작동하고 테이블을 공유하면 내가 공유한 사람은 왜 작동하지 않는지 궁금해 할 것입니다.
예2 사양 제한 설정
이 예제 스크립트는 Eval(EvalExpr())을 사용하여 값을 열 속성(이 경우 Spec Limits)으로 가져올 수 있는 방법을 보여줍니다.
더보기...
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)}
);
)
);
여기에 기본 이름(1); // 데모 테이블 생성 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", 설정값( [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.6 85370508348569] ) ) ); Column(dt, "y1") << 속성 설정( "Spec Limits", {LSL(-1), USL(1), Show Limits(1)} ); 하한값 = 0.5; 상한값 = 1.5; Column(dt, "y2") << 속성 설정( "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가 이미 Semiconductor Capability를 참조하고 있기 때문입니다(예를 들어 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");
여기에 기본 이름(1); dt = Open("$SAMPLE_DATA/Big Class.jmp"); biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density); biv << 닫을 때( close(dt, no save) ); dt = Open("$SAMPLE_DATA/반도체 기능.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");
여기에 기본 이름(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/반도체 기능.jmp");
도움이 될 수 있는 링크
Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입
식 처리 함수: 1부 - Expr(), NameExpr(), Eval(), ... 풀기 수수께끼
표현식(JMP 도움말, jmp.com)
표현식 함수(JMP 도움말, jmp.com)
추가 팁 여기에 기본 이름(1)으로 스크립트를 시작하십시오.
이렇게 하면 전역 변수로 네임스페이스가 오염되는 것을 방지하고 향후 문제를 방지할 수 있습니다.이것은 사용자 지정 네임스페이스를 사용하더라도 새 스크립트 파일을 시작할 때 항상 수행하는 작업입니다. 전역 네임스페이스에 실수로 변수가 생성되는 것을 방지하기 위해 이렇게 합니다.
도움이 될 수 있는 링크
고급 범위 지정 및 네임스페이스(JMP 도움말, jmp.com) (아주 잘 읽었습니다. 여러 페이지가 있습니다. 대부분의 페이지를 확인하세요!)
이름 확인 규칙(JMP 도움말, jmp.com)
효율성과 재현성을 위한 필수 스크립팅: 적은 작업으로 더 많은 작업 수행(2019-US-TUT-290)
안녕 @레셀 ,
나는 동의한다 @DonMcCormack , 전역 변수를 지우지 않는 것이 좋습니다. 그렇게 하고 싶지 않은 이유 중 하나는 스크립트에 "호출" 기능이 있는 경우입니다. 여기서 회수 버튼을 클릭한 다음 역할이나 값으로 캐스팅한 변수나 열을 클릭할 수 있습니다. JMP 플랫폼에서 사용하기 위해 입력한 항목은 자동으로 교체되므로 돌아가서 수동으로 수행할 필요가 없습니다. 스크립트 시작 부분에 clear globals(1)가 있는 경우 스크립트를 실행할 때마다 리콜 변수가 메모리에서 지워져 사실상 리콜 기능이 쓸모 없게 됩니다.
DS
@레셀 , 개인적으로 실행 중인 다른 스크립트를 방해할 수 있으므로 Clear Globals(1)를 사용하지 않는 것이 좋습니다. 스크립트 변수의 범위를 로컬로 지정하거나 자체 네임스페이스로 지정하는 것이 훨씬 안전합니다.
에 관해서
Names default to here (1);
사용하는 분들도 봤습니다
Clear globals (1);
또한 스크립트 시작 부분에.
그것이 유용한 이유를 이해할 수 있다고 생각하지만 그것에 대한 귀하의 의견은 무엇입니까?