<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />수식을 스크립팅하는 방법에 대한 질문을 자주받습니다 (공식의 참조 열에 대한 내용을 사용하여 동일한 수식을 여러 열에 적용). 이것은 보통 사람들이 스크립팅을 시작할 수있는 시작 장소이므로 초보자입니다.
나는 최근에 정기적 인 토론 섹션에 질문을 게시하여 고객이 참여하도록 유도하고 (그들은 참여하지 않았 음) 전문가의 조언 (이를 읽는 모든 사람)을 모두 시도했습니다. 이 질문이 나올 때 사람들에게 알려줄 수있는 확실한 답변을 만들고 싶습니다. 예를 들어, 1,000 개 이상의 열이있는 경우 제안 된 답변이 실제로 가장 좋은 방법입니까?
이것에 대한 도움을 주시면 감사하겠습니다. 또는 블로그 항목. 아니면 이것이 다른 곳에서 다루어 졌다고 지적하십니까?
정기 토론은 다음과 같습니다.
열 수식을 여러 열에 스크립팅하는 가장 좋은 방법은 무엇입니까?
감사합니다!
이전에 대한 후속 조치로 열 이름에 : Name () 함수를 사용하는 것을 알 수 있습니다. 이렇게하면 열 이름에 흥미로운 문자가있어 발생하는 문제를 방지 할 수 있습니다. 항상 필요한 것은 아니지만 다시 방탄입니다.
Don의 말에 이어 Eval (Parse (Substitute ()))을 사용하여 한 단계 더 나아가는 경우가 많습니다.
이것은 실제로 코드를 동적으로 작성하는 것입니다. 다소 우아하지는 않지만 거의 방탄입니다. 이 구조가 항상 가장 효율적인 것은 아니지만 (문자 대체로 인해) 다른 모든 트릭이 실패 할 때 성공하는 구조이므로 알아두면 좋습니다. 가장 큰 단점은 인용으로 인해 색상 코딩을 볼 수 없다는 것입니다.
여기에 기본 이름 ( 1 ) ;
dt = 열다 ( "$ Sample_Data / football.jmp" ) ;
codeFrag = "\ [
새 열 ( "_colName_ Rank from mean",
숫자,
"마디 없는",
형식 ( "최고", 12),
공식 (Col Rank (Abs (Col Mean (: Name ( "_colName_"))-: Name ( "_colName_"))))
)
] \ " ;
colList = dt << getcolumnnames ( 끈 ) ;
...에 대한 ( 나는 = 1 , 나는 <= nitems ( 충돌 ) , 나는 ++,
만약 ( 기둥 ( dt , colList [ 나는 ]) << 모델링 유형 가져 오기 == "마디 없는" ,
평가 ( 구문 분석 ( 대용품 ( codeFrag , "_colName_" , colList [ 나는 ])))
)
) ;
색상 코딩이 부족하면 아래와 같이 char (nameexpr ()) 구문으로 문자열을 래핑하여 유지할 수 있습니다. 이것은 복잡성을 추가하지만 디버깅 목적으로 코드를 작성하는 동안 가치가있을 수 있습니다. 일단 작동하면 항상 char (nameexpr ()) 부분을 제거하고 "\ [] \"를 사용하여 따옴표 안에 넣을 수 있습니다.
결론 : 미인 대회에서이기는 것은 아니지만 문자열을 직접 작성하고 구문 분석하고 평가하면 원하는 것을 얻을 수 있습니다. Eval (EvalExpr (...... Expr () ....)) 실패하고 이유를 알아낼 수 없습니다 (또는 알아낼 시간이 없거나 상관하지 않습니다).
여기에 기본 이름 ( 1 ) ;
dt = 열다 ( "$ Sample_Data / football.jmp" ) ;
codeFrag = 숯 ( nameexpr (
새 열 ( "_colName_ 평균 순위" ,
숫자 ,
"마디 없는" ,
체재 ( "베스트" , 12 ) ,
공식 ( Col 순위 ( 복근 ( Col 평균 ( : 이름 ( "_colName_" )) - : 이름 ( "_colName_" ) ) ) )
)
)) ;
colList = dt << getcolumnnames ( 끈 ) ;
...에 대한 ( 나는 = 1 , 나는 <= nitems ( 충돌 ) , 나는 ++,
만약 ( 기둥 ( dt , colList [ 나는 ]) << 모델링 유형 가져 오기 == "마디 없는" ,
평가 ( 구문 분석 ( 대용품 ( codeFrag , "_colName_" , colList [ 나는 ])))
)
) ;
건배,
브래디
로라,
포럼에 제시된 답변은 코드를 복잡하게 만들지 않는 확실한 접근 방식이라고 생각합니다. 이 상황에서 Expr과 Name Expr의 사용은 불가피하다고 생각합니다. 다음 단계로 루프에서 수식을 제거하여 코드를 더 일반적으로 만드는 것을 고려할 수 있습니다. 이렇게하면 수식을 인수로 사용하는 함수를 만들 수 있습니다 (첨부 된 JSL 참조). 이 작업을 수행하는 더 간단한 방법이있을 수 있지만 Substitute를 사용하는 데 너무 익숙합니다 (매우 강력합니다). [Row ()] 부분이 필요한 이유는 확실하지 않지만 통계 열 함수 내부를 제외하고는 열을 참조 할 때마다 해당됩니다. 이것이 통찰력을 제공하기를 바랍니다.
님