루프에 대한 간단한 질문안녕하세요,
저는 오랫동안 JMP를 사용해 왔지만 최근에 스크립트에 대해 배우기 시작했습니다. 기본 사항을 배우려고 노력하고 있으며 마스터하고 싶은 핵심 사항 중 하나는 for 루프의 사용입니다.
그래서 4개의 열이 있는 샘플 데이터 세트를 만들었습니다.
1) PATIENTID: 환자 번호에 대한 고유 값 목록
2) VALUE: 특정 시점의 환자 등급 값
3) TIME: 환자 평가가 수집된 시점
4) PARAM: 환자 평가는 4개 항목으로 나누어 총점
이 데이터 테이블의 모든 행을 반복하고 두 개의 서로 다른 변수(:TIME 및 :VALUE)의 값을 평가하는 스크립트를 작성했습니다. 조건이 충족되면 예 또는 아니요인 새 열의 행에 문자 값을 추가하고 싶습니다.
다음은 제가 작성한 스크립트입니다. JMP는 새 열의 각 행에 대해 빈 값을 반환합니다.
Names Default To Here( 1 );
dt = current data table ();
tr = N Rows (dt);
dt << New Column ("TEST", "CHARACTER",
For (i = 1, i <= tr, i++,
If(
(:TIME == "BASELINE" & :VALUE > 3)
,"YES"
,"NO"
)
)
)
;이것은 간단한 스크립트이며 메커니즘을 이해하면 더 많은 조건을 추가하고 싶습니다. 하지만 스크립트가 제대로 작동하지 않기 때문에 이 시점에서 막혔습니다.
또한 For Each Row 함수를 사용하여 이 스크립트를 작성하려고 시도했지만 여전히 같은 문제가 있습니다.
내가 뭘 잘못하고 있는지에 대한 조언이 있습니까? 이것이 간단한 답변이라면 죄송합니다. 설명서를 살펴 보았는데 제가 뭘 잘못하고 있는지 파악할 수 없는 것 같습니다.
Re: 루프에 대한 간단한 질문루프는 일반적으로 테이블 행이나 목록의 항목을 반복하는 데 사용되므로 1씩 증가하는 것이 가장 일반적입니다. 그러나 세 번째 인수는 i++가 아니어야 합니다. 말이 되는 것은 무엇이든 될 수 있습니다.
몇 가지 예:
For(i = 1, i <= 10, i = i + 0.1, Expr()); // Increment < 1 (100 iterations)
For(i = 10, i > 1, i--, Expr()); // Loop "backwards"
For(x = 2, x <= 10, x = 2, Expr()); // Eternal loop (better avoid these)
Re: 루프에 대한 간단한 질문루프가 새 열 정의 내부에 배치되기 때문에 작동하지 않습니다. 열을 만들고 별도의 문에 해당 값을 채우거나 열 수식을 사용합니다.
동일한 결과를 제공해야 하는 다음 세 가지 jsl 예제를 살펴보십시오.
Names Default To Here(1);
dt = Current Data Table();
tr = N Rows(dt);
//1. Fill values with a For() loop
dt << New Column("TEST", "CHARACTER");
For(i = 1, i <= tr, i++,
:TEST[i] = If(:TIME[i] == "BASELINE" & :VALUE[i] > 3,
"YES",
"NO"
)
);
//2. Fill with For Each Row()
dt << New Column("TEST2", "CHARACTER");
For Each Row(:TEST2 = If(:TIME == "BASELINE" & :VALUE > 3, "YES", "NO"));
//3. Use a column formula in TEST3
dt << New Column("TEST3",
"CHARACTER",
Formula(If(:TIME == "BASELINE" & :VALUE > 3, "YES", "NO"))
);
Re: 루프에 대한 간단한 질문수행하려는 작업은 두 가지 방법으로 수행할 수 있습니다.
a) 열에 수식 속성을 사용합니다.
Names Default To Here( 1 );
dt = current data table ();
tr = N Rows (dt);
dt << New Column ("TEST", "CHARACTER",
Formula(
If(
(:TIME == "BASELINE" & :VALUE > 3)
,"YES"
,"NO"
)
)
)
;b) 루프로 반복
Names Default To Here( 1 );
dt = current data table ();
dt << New Column ("TEST", "CHARACTER", Character, Nominal);
for(ii=1, ii<=N Rows(dt), ii++,
:test[ii]=If(
(:TIME[ii] == "BASELINE" & :VALUE[ii] > 3)
,"YES"
,"NO"
)
);For Each Row()를 사용할 수도 있습니다.
Names Default To Here( 1 );
dt = current data table ();
dt << New Column ("TEST", "CHARACTER", Character, Nominal);
for each row(
:test=If(
(:TIME == "BASELINE" & :VALUE > 3)
,"YES"
,"NO"
)
);
Re: 루프에 대한 간단한 질문한 가지 더 질문:
JSL 설명서에는 For 루프가 For 함수의 세 번째 인수를 사용하여 증가한다고 나와 있습니다. 나는 이것이 일반적으로 i++로 쓰여지는 것을 보았습니다. 나는 이것이 i를 1씩 증가시키는 것을 의미한다고 가정합니다. 하지만 1보다 작은 값으로 증가시키려면 어떻게 해야 합니까? 논거는 어떻게 작성하나요?
JSL 문서와 스크립팅 색인 도구는 이를 수행하는 방법에 대해 언급하지 않습니다.
감사해요Re: 루프에 대한 간단한 질문다음은 동일한 작업을 수행하기 위해 작성한 유사한 스크립트이지만 대신 다음을 사용합니다. 각 행에 대해 기능. 이것도 작동하지 않습니다.
Names Default To Here( 1 );
dt = current data table ();
dt << New Column ("TEST", "CHARACTER",
For Each Row (dt,
If (
(:TIME == "BASELINE" & :VALUE > 3)
,"YES"
,"NO"
)
)
)
;도움을 주셔서 감사합니다.