변수를 참조하여 열 호출여기 완전 초보,
이전 게시물에서 해결책을 찾을 수 없습니다.
기존 열 이름을 포함하는 변수를 만들었습니다. 다른 두 열의 데이터가 합산되면 새 열을 만들고 싶습니다(변수로 열 호출). 변수의 사용법은 나중에 for 루프에서 사용하기 위한 것입니다.
도와 줘서 고맙다!
아래 코드의 경우:
dt = Current Data Table();
columnname1 = Column( dt, 1 ) << Get Name;
columnname2 = Column( dt, 2 ) << Get Name;
dt << New Column( "new_" || columnname1, Numeric , continuous, formula(column(dt, columnname1)+column(dt, columnname2)));
다음과 같은 오류가 발생합니다.
열 new_Column 1 2 수식이 중단됨
인수를 숫자[또는 행렬]로 1번 변환할 수 없습니다. At rows: 2 Operation: Add, Column( dt, columnname1 ) + /*###*/Column( dt, columnname2 ) /*###*/
수식 평가 오류가 무시되었습니다.
열( "new_Column 1 2" )
고급 통계 모델링데이터 접근데이터 혼합 및 정리데이터 탐색 및 시각화Re: 변수를 참조하여 열을 호출합니다.@txnelson 이것에 대해서는 아주 옳습니다.내가 제안한 방법은 게으른 옵션이었고 돌이켜 보면 내가 권장하는 접근 방식이 아닙니다.올바른 값이 있는 열만 원하는 경우 수식을 사용하지 않고 루프에서 계산을 수행할 수 있습니다. 수식이 중요한 경우 스크립트가 수식을 올바르게 인코딩했는지 확인해야 합니다. 숫자가 올바르게 표시되는 것만으로는 충분하지 않습니다.스크립트 변수는 스크립트의 수명을 초과하여 지속되지 않으므로 수식이 열 참조를 올바르게 포함해야 합니다. 이는 Jim이 설명한 것과 같은 식 대체 기술을 사용하여 달성됩니다.
Re: 변수를 참조하여 열을 호출합니다.빠른 답장을 보내 주셔서 감사합니다. 효과가있다!
Re: 변수를 참조하여 열을 호출합니다.당신은 그것을 작동시킬 수 있습니다
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula(
As Column( dt, columnname1 ) + As Column( dt, columnname2 )
)
);
그러나 여기에는 잠재적인 문제가 있습니다.저장된 공식은 다음과 같습니다.

이 공식은 JMP 세션이 진행되는 한 계속 작동합니다.
- 변수 dt, columnname1 및 columnname2가 정의되어 있습니다.데이터 테이블을 저장하고 JMP를 종료한 다음 내일 들어와서 JMP를 시작하고 데이터 테이블을 열면 어떻게 됩니까?수식이 해당 변수를 찾지 못하고 수식이 실패합니다.
- 세션 내에서 변수 dt, columnname1 및 columnname2는 해당 값을 변경하지 않습니다.따라서 이 열을 생성하고 나중에 스크립트에서 JMP 데이터 테이블의 수식 열이 동적이므로 데이터 테이블이 변경될 때 JMP가 다시 실행되므로 변수 columnname1의 값을 변경하게 됩니다. 변수의 새 값을 사용하고 수식 열에 대한 새 값을 만듭니다.
실제로 해야 할 일은 수식에 대한 실제 JSL 구문을 생성하는 메서드를 사용하는 것입니다.위의 예에서 실제로 원하는 수식은 다음과 같습니다.
:height + :weight
아래의 JSL은 이를 수행하는 한 가지 방법입니다.Substitute() 함수를 사용하여 실제 열 이름을 수식에 삽입합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula( __c1__ + __c2__ )
)
),
Expr( __c1__ ), Parse( ":" || columnname1 ),
Expr( __c2__ ), Parse( ":" || columnname2 )
)
);Re: 변수를 참조하여 열을 호출합니다.열을 참조하는 변수를 이미 만들었습니다.수식에서 사용할 수 있지만 AsColumn 함수를 사용해야 합니다.
formula( AsColumn(columnname1) + AsColumn(columnname2) )
Re: 변수를 참조하여 열을 호출합니다.이 질문을 읽는 미래의 독자들을 위해:
위의 코드를 사용하여 문자열 열 이름을 수식에 전달했지만 사용에 문제가 있었습니다.
Parse(":" || column_name)"a - b"와 같은 열 이름은 열 "a"에서 변수 "b"를 뺀 것으로 해석되므로 구문 분석은 홀수 열 이름에 취약합니다.
대신 사용
As Name(columnname)
이 문제를 해결합니다.