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