For 루프는 수식을 올바르게 계산하지 않습니다.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />데이터 테이블에 새 열을 만들려고하는데 각각의 새 열은 기존 열의 Z 점수입니다. 여기에 내가 가진 것이있다.
Colnames_1st = dt_zscore3 << 열 이름 얻기 ();
nlist = N 항목 (Colnames_1st);
for (i = 5, i≤ 10, i ++,
var1 = 열 (Colnames_1st );
mean = Col 평균 (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
새 열 ( "Zscore"|| namevar,
숫자, 연속,
형식 ( "최고", 12),
수식 ((((var1 []) - 평균) / stdev))));
);
이 코드는 6 개의 새 열을 만들고 올바르게 이름을 지정합니다.
그러나 모든 열의 값을 채울 때 제대로 수행되지 않습니다.
모든 열은 각 행에서 동일한 값으로 끝납니다. 그것은 내게 그것을 좋아한다.
는 열을 생성하지만 for 루프가 끝날 때까지 기다렸다가
모든 열의 각 행에 들어가는 값이므로 모든 값의 마지막 값을 사용합니다.
각각의 수식을 계산하는 대신 모든 열에 대한 변수
해당 열에서 사용해야하는 값을 사용하여
나는 정말로 붙어있다. 나는 모든 종류의 일을 시도했지만이 장애물을 극복 할 수는 없습니다.
어떤 도움이라도 대단히 감사 할 것입니다.
Re : For 루프가 수식을 올바르게 계산하지 않습니다.귀하의 솔루션에 문제가있을 수 있습니다. 열이 만들어지면 작동하지만 다른 세션에서는 작동하지 않거나 데이터가 소스 열에서 변경되거나 추가 된 경우 작동하지 않을 수 있습니다.
새 열의 공식을 보면 "(var1 [] - mean) / stdev"처럼 보일 것입니다. 이러한 변수 이름은 현재 스크립트 컨텍스트에서만 (또는 for 루프 반복 내 에서조차) 이해할 수 있습니다. 변수가 재정의되거나 지워지면 수식이 제대로 작동하지 않습니다.
수식은 문자 그대로 입력해야합니다. 왜냐하면 Formula () 인수의 변수는 분명히 평가되지 않고 그대로 사용되기 때문입니다. 예를 들어 for 루프에서와 같이 변수를 사용해야하는 경우 문자열이나 표현식을 조작하여이를 수행 할 수 있습니다.
evalexpr ()을 사용하여 표현식을 평가하기 전에 표현식을 평가하는 예제는 다음과 같습니다.
dt = 열다 ( "$ SAMPLE_DATA / Big Class.jmp" ) ;
엔 = N Col ( dt ) ;
에 대한 ( 나는 = 4 , 나는 <= 엔 , 나는 ++,
var1 = 기둥 ( 나는 ) ;
평가 (
Eval Expr (
dt << 새 열 ( "Zscore" || ( var1 << 이름을 얻다 ) ,
숫자 ,
마디 없는 ,
공식 ( Col 표준화 ( Expr ( var1 ) ) )
)
)
) ;
) ;
Re : For 루프가 수식을 올바르게 계산하지 않습니다.드디어 해결책을 찾은 것 같습니다.
내 문제는 로컬 변수와 글로벌 변수를 정의하는 데 어떻게 든 자리를 잡았다는 느낌이 들었지만 문제가 무엇인지에 상관없이 문제를 해결하는 방법을 찾지 못했습니다.
대신에 나는
dt_zscore3 << 수식 실행
이제는 올바르게 처리됩니다.
Colnames_1st = dt_zscore3 << 열 이름 얻기 ();
nlist = N 항목 (Colnames_1st);
for (i = 5, i = nlist, i ++,
기본 이름은 여기에 있습니다 (1);
var1 = 열 (Colnames_1st );
// var1 = Column (Colnames_1st );
mean = Col 평균 (var1);
stdev = Col Std Dev (var1);
namevar = char (Colnames_1st );
새 열 ( "Zscore"|| namevar,
숫자, 연속,
형식 ( "최고", 12),
수식 ((((var1 []) - 평균) / stdev))));
dt_zscore3 << 수식 실행
);
이것은 아마도 우아하지 않거나 그것을하는 가장 올바른 방법은 아니지만 누군가가 유용하다고 생각하는 경우 게시합니다.