다른 테이블의 열 참조두 개의 소스 테이블을 읽어 새 테이블을 만들려고 합니다.나는 그것들을 하나의 큰 테이블에 결합하고 거기에서 조작하는 것을 피하고 싶습니다.새 테이블은 두 소스 테이블 사이의 델타 배열이 됩니다.스크립트는 열을 잘 생성하지만 아무 것도 채우지 않습니다.내 수식에서 다른 테이블의 열을 참조할 때 누락된 구문이 있다고 가정합니다.
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);데이터 혼합 및 정리Re: 다른 테이블의 열을 참조하는 중입니다.확인하기 쉽습니다. JMP에서 열 헤더를 두 번 클릭하면 열 정보 창이 열립니다. 실제 열 이름이 나열됩니다.Re: 다른 테이블의 열을 참조하는 중입니다.엑셀 시트(저희 테스터의 출력)에서 열 이름을 가져왔기 때문에 열 이름에 묻혀 있는 것 같습니다.
Re: 다른 테이블의 열을 참조하는 중입니다.열 속성으로 정의된 단위는 열 이름의 일부가 아닙니다.
Re: 다른 테이블의 열을 참조하는 중입니다.아. 열 2 이후의 모든 열에는 이름에 측정 단위인 (xxx)가 있는 것 같습니다.그럴 수도 있지?로그는 이와 같은 모든 열에 대해 오류를 발생시킵니다.
Re: 다른 테이블의 열을 참조하는 중입니다.데이터 문제인 것으로 추정됩니다.코드는 2개의 열이 있는 테스트 사례에서는 제대로 작동했지만 "predt" 변수에서 찾은 만큼의 열을 처리하도록 작성되었습니다.
For( i = 1, i <= N Cols( predt ), i++,
따라서 당신이 해야 할 일은 코드를 단계별로 실행하고 변수 값을 확인하고 무슨 일이 일어나고 있는지 확인하는 것입니다.귀하의 데이터가 이 토론에 게시되지 않으면 무슨 일이 일어나고 있는지 알 수 없습니다.
로그에 표시되는 메시지가 있습니까?
Re: 다른 테이블의 열을 참조하는 중입니다.빠른 답변 감사합니다!이 스크립트를 사용하면 처음 두 열의 델타만 얻는 것 같습니다.열의 형식은 나머지(숫자, 연속)와 동일하므로 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다.
Re: 다른 테이블의 열을 참조하는 중입니다.당신은 당신을 욕하는 몇 가지 문제가 있었습니다.
- 빈 데이터 테이블에 << Add Rows()를 수행해야 합니다.
- Column() 함수를 사용하는 형식은 postdt:column( postcols[i] )이 아닙니다.이 상황에서 사용할 수 있는 방법이라면 형식은 Column( postdt, postcols[i] )입니다.하지만 여기서 필요한 건 그게 아니다
- New Column() 작업에서 수식을 할당하는 것은 약간 까다롭습니다.설정된 Formula()는 공식이 만들어지기 전에는 평가되지 않습니다.즉, postcols[i]를 수식에 넣으면 수식을 작성할 때 postcols[i]의 값을 조회하지 않고 단지 postcols[i]를 수식에 넣은 다음 실행을 시도합니다. 수식이 실행될 때.이에 대한 문제는 변수 "i"가 루프에서 계속해서 다시 할당되기 때문에 "i"가 참조된 모든 수식이 JSL 내에서 "i"가 변경될 때마다 변경된다는 것입니다.그것은 당신이 원하는 것이 아닙니다.따라서 수행해야 할 작업은 JSL에서 원하는 정확한 코드 문자열을 평가한 다음 해당 JSL을 실행하여 새 열을 만드는 것입니다.아래의 수정된 JSL에서 이를 확인할 수 있습니다.
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");