스크립트에서 수식에 대한 입력으로 열 값을 사용하는 방법은 무엇입니까?모두,
제 질문은 매우 기본적이라고 생각하지만 아직 답변을 찾지 못했습니다.
아래와 같은 데이터 테이블이 있습니다.

나는 원한다
a) %CFB 열 3으로 표시된 3개의 새 열을 포함합니다. %CFB 열 4 및 %CFB 열 5. %CFB는 기준선 대비 % 변화를 나타냅니다.
b) 각각의 새 열에 다음 공식에서 파생된 값을 사용하여 기준선 대비 % 변화를 입력하고 싶습니다.
%CFB = (x - 열 3)/열 3, 여기서 "x"는 아래 코딩된 각 반복에서 열 3, 4 또는 5의 값으로 대체됩니다.3열은 기준값입니다.
dt = Current Data Table();
startcol = 3;
endcol = 5;
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
New column ("%CFB " || data_col) << Formula((( :data_col - :column 3) / :column 3) * 100 ));
위의 스크립트를 사용하여 새 열을 만들 수 있었지만 수식의 결과가 해당 열에 배치되지 않았습니다.수동으로 교환할 때 열 3 ~을 위한 data_col 수식에서 모든 새 열은 예상대로 0으로 평가됩니다.이는 공식이 최소한 정확하고 data_col 변수가 내가 원하는 대로 해석/대체되지 않는다는 것을 알려줍니다.이 작업을 수행하는 방법에 대한 통찰력을 주시면 감사하겠습니다.
귀하의 도움에 미리 감사드립니다.
플로이드 폭스
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />얼마나 많은 의견이 환영받는지 모르겠지만, 여기 들어갑니다.
개인적으로 나는 Eval(Parse())에 대해 큰 반대자입니다. 왜냐하면 편집기 내부의 가독성을 대폭 감소시키기 때문입니다.나는 대부분이 완전히 분홍색(또는 문자열에 대해 선택한 색상)인 5000줄의 스크립트를 보았습니다.표현식 대체 기능을 사용하면 구문 강조를 그대로 유지하고 다른 사람의 스크립트를 훨씬 쉽게 편집할 수 있다고 생각합니다.
나는 아직도 가끔 eval(parse())을 사용하고, 필요할 때는 JSL quote()를 사용하려고 합니다.
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?범위 지정 처리에 대한 훌륭한 참고 사항 WK 모든 것을 함께 포장 플로이드폭스 일부 코드 형식을 사용합니다.
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
new_col_name = "%CFB " || data_col;
Eval(
Eval Expr(
dt << New Column( Expr(new_col_name),
Numeric,
Continuous,
Formula( ((Column( dt, Expr( data_col ) )[] - :column 3) / :column 3) * 100 )
)
)
);
);
변수 범위 지정에 대한 또 다른 해결 방법은 공식( 방정식) 대신 Set Each Value( 방정식 )를 활용하는 것입니다.이는 공식이 계산되지 않기 때문에 더 적은 리소스를 사용한다는 이점이 있지만 해당 공식을 수정하는 데 손실이 발생한다는 단점이 있습니다.
좋은 도구와 마찬가지로 올바른 도구를 사용하여 문제에 접근하는 방법은 많습니다.당신이 언급했듯이 Substitute()는 상황이 더욱 발전하기 시작할 때에도 훌륭한 옵션입니다.Substitute는 문자열을 JSL 코드로 변환하는 Parse()와 JSL을 실행할 수 있게 해주는 Eval()과 함께 사용하면 특히 유용합니다. 이는 Eval(Parse(Substitute())) 문으로 이어집니다.이 마지막 기술은 JMP 플랫폼에 내장된 기능을 래핑할 때 특히 유용합니다.parse()와 eval(parse)의 조합을 더 자세히 설명하기 위해 간단한 예를 포함했습니다.

즐거운 코딩하세요!
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?안녕하세요,
이 예에서는 변수 data_col이 여전히 수식에 나타납니다.For 루프에 data_col을 할당하므로 루프가 완료된 후 수식을 평가하려고 하면 세 개의 새 열 모두에서 동일한 값이 생성됩니다.이는 data_col이 For 루프의 마지막 값인 "열 5"를 나타내기 때문입니다.또한 테이블을 저장한 다음 JMP를 닫는다고 가정해 보겠습니다.JMP의 새 인스턴스에서 테이블을 다시 열고 공식을 평가하려고 하면 JMP가 data_col이 무엇을 나타내야 하는지 더 이상 알 수 없기 때문에 오류가 나타납니다.
공식에서 변수를 사용하는 경우 공식을 평가하기 전에 변수를 해당 값으로 바꾸도록 JMP에 지시하는 작업을 수행해야 합니다.Substitute()를 사용할 수 있지만 Eval Expr() 메서드는 다음과 같습니다. vince.faller0 언급)은 대부분의 사람들이 구현하기 더 쉽습니다.Eval Expr()은 인수로 제공하는 표현식 내에서 Expr() 함수에 래핑된 모든 변수를 평가(대체)하도록 JMP에 지시합니다. 외부 Eval()을 사용하면 대체가 발생한 후 JMP가 전체 New Column 문을 평가하게 됩니다.JMP 사용 참고사항 41824 도 이 개념을 보여줍니다.
이게 도움이 되길 바란다.
웬디
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?빈스,
감사합니다.솔직히 귀하가 제공한 표현식에 대해 좀 읽어 봐야 할 것입니다. 하지만 제 코드가 작동하지 않은 이유에 대한 귀하의 통찰력에 감사드립니다.
문안 인사
플로이드
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?네이트,
감사합니다. 이 코드는 작동하며 코드 이면의 논리를 이해할 수 있다는 추가 이점도 있습니다.
플로이드
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?vince.faller0 실제로 문제의 근본 원인을 정확하게 식별했습니다.데이터 테이블에 data_col이라는 열이 없습니다.따라서 작성된 코드는 존재하지 않는 것을 참조하고 있습니다.또한 Vince는 JSL을 사용하여 동적 참조를 유지하는 코드를 작성하는 몇 가지 강력한 방법을 보여줍니다.즉, 좋은 언어에는 논리를 실행할 수 있는 여러 옵션이 있습니다.
열을 참조하는 다른 형식을 사용하는 것이 좋습니다.간단한 형식은 세미콜론과 열 이름을 사용하여 현재 데이터 테이블 열을 참조하는 것이지만 보다 강력한 방법은 열(데이터 테이블 참조, 열 문자열 또는 숫자) 형식을 사용하는 것입니다.아래에서는 해당 형식을 사용하도록 코드를 약간 수정했습니다.
dt = Current Data Table();
startcol = 3;
endcol = 5;
For( i = startcol, i <= endcol, i++,
data_col = Column( i ) << get name;
col_name = "%CFB " || data_col;
dt << New Column(col_name,
Numeric,
Continuous,
Formula( ((column(dt, data_col)[] - :column 3) / :column 3) * 100 ) );
);
Re: 열 값을 스크립트의 수식 입력으로 사용하는 방법은 무엇입니까?:variable (특히 <
으로 변경하면
data_col = Column( i ) ;
Eval(EvalExpr(New column ("%CFB " || Expr(data_col<<GET name=""></GET>
작동해야합니다.
EvalExpr() 내부의 모든 Expr()을 변수 대신 실제 값으로 대체합니다.