안녕,
많은 토론/스크립팅 인덱스를 조사했지만 .. 각 값을 N 번 반복하여 시퀀스 데이터를 입력할 수 있는 새로운 열 명령을 대신하는 JSL 스크립트를 작성하는 방법에 대한 답을 얻을 수 없었습니다. 수동으로 수행하는 방법을 알고 있습니다. 토론 중 하나에서 Mark B의 답변 덕분에 스크립트를 작성하는 데 어려움을 겪고 있습니다.
예를 들어
N_DOE= 10
N_XRF =4
=> {1,1,1,1,2,2,2,2,3,3,3,3, ...10,10,10,10}
//How may I get a column with repeating values
dt=current data table();
N_DOE=10;
N_XRF=4;
seq = sequence(1,N_DOE,1,N_XRF);
dt << new column("Run", "numeric", "ordinal");
//dt:run << set each value(seq,); // this works, but it is just"1" for all rows
dt:run << set each value(i=1,i<N_DOE></N_DOE>@PS_Ato , Jim, @txnelson 은 이미 솔루션을 제공했습니다.
JMP 함수인 Sequence() 및 Count()는 데이터 테이블 작업 시 매우 유용한 함수입니다. 두 함수 모두 현재 데이터 테이블의 Row() 에 의존하기 때문입니다.
행렬로만 시퀀스를 원하는 경우가 있을 수 있습니다. 한 가지 방법은 행렬 함수 Direct Product(amat, bmat) 입니다. 아래 스크립트는 원본 스크립트와 유사합니다. seq 는 반복되는 값의 벡터를 생성한 다음 이를 새 열에 할당합니다.
이는 참고용으로 제공됩니다. 행렬을 사용하지 않았거나 선형 대수학을 공부한 적이 없다면 이것이 가장 먼저 떠오르는 함수가 아닐 것입니다.
Names Default to Here(1);
N_DOE=10;
N_XRF=4;
New Table("Dummy", add rows(N_DOE * N_XRF));
dt=current data table();
seq = Transpose(Direct Product(Index(1,N_DOE),J(1,N_XRF,1)));
dt << new column("Run", "numeric", "ordinal", values(seq));
/* Log output
seq = Transpose(Direct Product(Index(1,N_DOE),J(1,N_XRF,1)));
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10]
*/
Sequence() 함수는 실제로 수식 내에서만 작동합니다. 스크립팅 인덱스에서 살펴보세요.
도움말==>스크립팅 색인.......순서
다음은 실제 예입니다.
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
N_DOE=10;
N_XRF=4;
dt << new column("Run", "numeric", "ordinal");
// Create the JSL required to set the format and then
// execute it
Eval( Parse(
"dt:run << set formula( sequence(1, " || char(N_DOE) ||
", ince = 1, n = " || char(N_XRF) || "));"
)
);