비닝을 위한 JSL 스크립트안녕,
1248개의 행과 2435개의 열이 있는 희소 행렬이 있습니다. 내 첫 번째 열은 CustomerID이고 나머지는 각 고객이 주문한 수량을 값으로 사용하는 제품입니다. 각 열에는 다른 범위가 있습니다. 20 백분위수에서 컷 포인트를 사용하여 열 값을 1 - 5로 표준화하고 싶습니다. 대화형 비닝 추가 기능이 열 수가 적은 경우 수행하는 데 도움이 될 수 있음을 발견했습니다. 저는 JMP를 처음 사용하며 누군가 JSL 스크립트를 사용하여 이를 달성할 수 있도록 도와주시면 감사하겠습니다. Binning은 누락된 값을 제외해야 합니다.
참고용으로 데이터 테이블을 첨부했습니다. 미리 감사드립니다.
문안 인사,
타라

Re: 비닝을 위한 JSL 스크립트고마워 짐. 해당 열 이름을 수동으로 다시 코딩하겠습니다. 다시 한번 도와주셔서 감사합니다!.
Re: 비닝을 위한 JSL 스크립트참고: 방금 또 다른 문제를 찾았습니다. 같은 문제가 더 복잡합니다.일부 열에는 이름에 큰따옴표가 있습니다.... 스크립트에 오류가 발생합니다.......
이것은 해결할 수 있지만 가장 쉬운 해결책은 이름의 큰 따옴표를 작은 따옴표로 변경 한 다음 (수동으로) 아래에 표시된 변경 사항으로 스크립트를 실행하는 것입니다.
이것은 일반적인 문제이며 나는 이 문제에 대해 보호했어야 했습니다.
7번째 열의 이름은 다음과 같습니다.
BONNE JAM JAR T-라이트 홀더
보호되지 않는 한 JMP는 이름을 단일 열 이름이 아니라 두 개의 열로 해석합니다.
본 잼 JAR T
그리고
라이트 홀더
JMP는 두 이름 사이에 빼기 기호 "-"를 찾기 때문에 다른 하나에서 하나를 빼려고 합니다.이러한 복잡한 열 이름을 방지하기 위해 JMP에는 :Name()이라는 함수가 있습니다.따라서 코드에서 다음 줄을 바꾸면:
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
와 함께:
Expr( __col__ ), Parse( ":Name(\!"" || Char( Column( dt, i ) << get name ) || "\!")")
그것은 작동합니다
Re: 비닝을 위한 JSL 스크립트안녕하세요 짐,
시간을 내주셔서 감사합니다. 스크립트는 처음 7개 열에 대해 제대로 작동했습니다. 더 이상 진행되지 않는 이유를 알 수 없었습니다. 참고하시라고 jmp 파일을 첨부했습니다.스크립트를 약간 변경했습니다. dt = Current Data Table (); , i = 2 및 _col_[RowP80_100] = 5. 나머지는 동일하게 유지됩니다.
감사
타라
Re: 비닝을 위한 JSL 스크립트다음은 원하는 작업을 수행하는 샘플 스크립트입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Semiconductor Capability.jmp" );
For( i = 5, i <= N Cols( dt ), i++,
Eval(
Substitute(
Expr(
RowsP0_20 = dt << get rows where( __col__ <= Col Quantile( __col__, .2 ) );
RowsP20_40 = dt << get rows where(
__col__ > Col Quantile( __col__, .2 ) & __col__ <=
Col Quantile( __col__, .4 )
);
RowsP40_60 = dt << get rows where(
__col__ > Col Quantile( __col__, .4 ) & __col__ <=
Col Quantile( __col__, .6 )
);
RowsP60_80 = dt << get rows where(
__col__ > Col Quantile( __col__, .6 ) & __col__ <=
Col Quantile( __col__, .8 )
);
RowsP80_100 = dt << get rows where( __col__ > Col Quantile( __col__, .8 ) );
__col__[RowsP0_20] = 1;
__col__[RowsP20_40] = 2;
__col__[RowsP40_60] = 3;
__col__[RowsP60_80] = 4;
__col__[RowsP80_100] = 1;
),
Expr( __col__ ), Parse( ":" || Char( Column( dt, i ) << get name ) )
)
)
);
스크립트는 필요한 것보다 더 복잡합니다.즉, 열을 가리키는 스크립트의 각 지점을 대체하기 위해 As Column()을 사용할 수 있었지만 이 계산 오버헤드로 인해 처리를 위해 열당 약 1분의 코드 실행이 필요했습니다.코드의 대체 버전은 몇 초 안에 모든 것을 처리합니다.