최고의 스크립팅 팁안녕하세요 커뮤니티,
저는 Monica Beals가 도움을 준 스크립팅 과정을 시작했습니다. JMP 스크립팅 언어 소개 - JMP 사용자 커뮤니티
아직 배우는 중이지만 기본적인 질문이 있습니다.
모든 사람이 알아야 할 스크립팅 명령/팁이나 더 일찍 알았으면 좋았을 스크립트 명령/팁은 무엇입니까?
예: pickfile은 일련의 명령을 실행하려는 파일을 선택할 수 있으므로 사람들이 알아두면 좋은 것입니다.
답변: 최고의 스크립팅 팁더 일찍 알았더라면 좋았을 세 가지 사항:
- Open()을 사용하면 스크립터가 Pick File() 스크립팅을 건너뛸 수 있는 경우가 많습니다.
- 스크립트 창에서 함수를 Alt 키를 누른 채 두 번 클릭하면 해당 함수에 대한 스크립팅 인덱스로 바로 이동합니다.
- 특히 최근 속성 뷰어에 상자 경로 섹션이 추가되면서 보고서 레이어 스크립팅이 다른 것보다 더 쉬워졌습니다.
-

답변: 최고의 스크립팅 팁@Jed_Campbell 의 3개에 3개를 추가하겠습니다.
- 어떠한 경우에도 현재 데이터 테이블을 사용하여 현재 데이터 테이블을 설정해서는 안 됩니다. 테이블이 생성될 때 인스턴스화된 변수 참조를 통해 테이블에 명시적으로 액세스해야 합니다. 많은 스크립터는 특히 Joins , Stacks 또는 Subsets 가 많은 경우 어느 테이블이 현재 테이블인지 추적하는 데 어려움을 겪습니다. 게다가 현재 테이블로 설정된 테이블은 운영에 따라 수년에 걸쳐 변경되었습니다. 나는 이로 인해 다른 어떤 것보다 더 많은 스크립트가 중단되는 것을 보았습니다.
- SendToReport 를 혼동하지 마세요. 기능은 잘 문서화되어 있지 않으며 작업을 더 쉽게 완료하고 코드를 더 읽기 쉽게 만드는 메시지가 항상 (거의?) 있습니다.
- 표현식 처리( Substitute , Eval , Expr 및 Name Expr )를 사용하는 방법을 알아보세요. @joseph_morgan ( 여기 )과 @drewfoglia ( 여기 및 여기 )에는 이 개념에 대해 훌륭한 설명을 제공하는 Discovery 자료가 있습니다. JSL Cookbook에는 여기 와 여기 에서 다루는 두 가지 레시피가 있습니다. 명확하게 이해하기 어려운 주제입니다. 하지만 일단 숙달하고 나면 다른 방법으로는 불가능한 일을 할 수 있게 될 것입니다. 표현식 처리로 수행할 수 없는 경우 JSL에서도 수행할 수 없습니다.
답변: 최고의 스크립팅 팁이미 말한 내용을 무시하려는 것은 아니지만 @DonMcCormack 포인트 3은 다음에 배울 수 있는 가장 중요한 것입니다. 표현식 처리는 놀라울 정도로 강력하며 JSL의 놀라운 기능에 액세스할 수 있게 해줍니다. JSL의 모든 것이 표현식이라는 것을 깨닫고 나면 스크립트를 완전히 다르게 보기 시작합니다. 나는 Joseph과 Drew의 자료를 연구하고 다음에는 그들의 예를 살펴보겠습니다.
그 후 개인적으로 가장 좋아하는 것은 다음과 같습니다.
- 새로운 For Each() 루프(및 그 친척인 Filter Each() 및 For Each Row()). 아주 오래된 JMP 릴리스에서 실행하기 위해 스크립트가 필요하지 않다면 이전 For() 루프가 존재한다는 사실을 잊어버릴 것입니다.
- 1과 관련된 인덱스 함수의 약식 버전: 즉, 1::10::2는 1에서 시작하여 10부터 2까지 계산하는 벡터를 생성합니다(1,3,5,7,9 제공). For Each() 루프에서 사용할 수 있습니다.
- 연관 배열 및 이를 사용하는 방법(For Each() 루프에서 처리하는 방법 포함)
- 가능한 모든 것에 데이터 테이블 대신 행렬을 사용하는 방법(및 For Each() 루프와 함께 사용하는 방법)을 배웁니다.
답변: 최고의 스크립팅 팁신규 사용자이므로:
- 세미콜론. JMP(또는 SAS)에서 문제가 발생하면 먼저 여기를 살펴보세요. 확인하기 쉬운 수정 및 상자가 너무 자주 범인입니다. 다음은 괄호와 괄호입니다. [1b. 로그는 종종 이러한 실행 문장을 적절하게 표현할 수 없습니다. 일반적으로 이전 코드 줄도 살펴보세요.]
- 스크립트를 빌드/테스트할 때 Print()를 넉넉하게 사용하세요. "이 변수는 루프의 이 단계에서 내가 기대하는 값입니까?": Print("Varname: " || varname). "프로세스가 어떤 단계에서 중단됩니까(예: 무한 루프)?" 인쇄("3단계 완료, 4단계 전"). [2b: 프로젝트가 계속 성장할 가능성이 있는 경우 표시기 플래그(0/1 또는 T/F)로 사용할 변수를 만들고 디버그하려는 경우 If() 문을 활용하여 Print() 문을 활성화하세요. .]
- DoE처럼 작게 시작하세요. 예를 들어 For Each() 루프를 통해 100개의 항목을 실행하려면 처음 2-4개만 사용하여 루프를 테스트하세요. 대기 시간과 잠재적인 충돌을 방지하세요.
Mike는 또한 여기에서 자신의 생각을 확장하는 블로그 시리즈를 가지고 있습니다: https://community.jmp.com/t5/JMPer-Cable/The-1st-thing-I-wish-I-knew-when-I-started-scripting- 거기에/ba-p/276580
Eval/Expr 함수에 대해서는 아직 편안함을 느낄 만큼 충분한 JSL을 작성하지 않았습니다. 하지만 내 코딩 경험에서 SAS의 매크로 기능에서 &(및 &&& ….즐거운 추억!)를 사용할 수 있는 것만큼 놀라운 것은 없었고 지금까지 Eval/Expr을 JSL과 유사한 것으로 생각했습니다. (컨텍스트: JMP 이전 경력의 대부분은 SAS 프로그래밍이었지만 저는 여러 가지 일에 손을 댔습니다.)
답변: 최고의 스크립팅 팁귀하의 #1 항목은 모두가 알아야 할 훌륭한 요령을 생각나게 합니다. Ctrl-[는 괄호 안의 모든 항목을 선택합니다. 이는 디버깅, 완전성 확인, 특히 코드 수정(복사/붙여넣기/교체)에 매우 유용합니다.