다른 두 열의 값을 기반으로 새 열을 만드는 방법은 무엇입니까?안녕하세요:
저는 오랫동안 JMP를 사용해 왔으며 이제 막 스크립팅과 공식 편집기 사용에 대해 알아보기 시작했습니다. 나는 큰 테이블(약 10K 행)을 가지고 있습니다. 관심 있는 열이 여러 개 있습니다.
- Patient_ID: 각 환자의 고유 식별자
- 시간: 실험실 샘플이 수집된 시점
- LAB_VALUE: 3가지 개별 가능성(NORMAL, MILD, SEVERE)이 있는 실험실 매개변수 값
- SEX: 환자의 성별
다음을 기반으로 "STATUS"라는 새 열을 만들고 싶습니다.
- Lab_Value의 기준 값 = 정상이고 하나 이상의 기준 이후 값이 MILD 또는 SEVERE인 경우 STATUS 열에 "1"로 표시합니다.
- Lab_Value의 기준 값이 약하고 하나 이상의 기준 이후 값이 심각인 경우 상태 열에 "2"로 표시합니다.
- Lab_Value의 기준 값이 심각하고 하나 이상의 기준 이후 값이 MILD 또는 NORMAL인 경우 상태 열에 "3"으로 플래그를 지정합니다.
일부 환자는 모든 실험실을 완료하기 전에 중퇴하기 때문에 약간 복잡해집니다. 일부 환자는 종료점(372일)까지 데이터를 갖고 있지만 다른 환자는 그렇지 않습니다. 그래서 스크립트를 작성하는 것이 어렵습니다.이 작업을 수행하는 방법을 알려주는 데 도움을 주시겠습니까? 수식 기능을 사용하여 여러 if 문을 만들려고 했지만 제대로 작동하지 못했습니다. 어떤 도움이라도 주시면 감사하겠습니다.
많은 감사
Re: 다른 두 열의 값을 기반으로 새 열을 만드는 방법은 무엇입니까?친애하는 짐:
감사합니다. 정말 도움이 되었습니다. 정말 감사합니다. 귀하의 스크립트가 저에게 효과적이었습니다.
나는 스크립트에 추가하는 방법을 알아내려고 마지막 날을 보냈습니다. 특히 LAB_VALUE에 대한 네 번째 카테고리를 만들고 싶습니다. 환자의 실험실 가치 상태가 아래 3가지 조건 중 어느 하나도 충족하지 않는 경우 이를 네 번째 범주 "4"로 표시하고 싶습니다.
마지막 if 문에 ",4)"를 추가하려고 했지만 작동하지 않았습니다. 스크립트 편집기에서 , 또는 )가 누락되었다고 계속 불평했습니다. 또는 일부 행을 평가하지 않습니다. 당신이 제공할 수 있는 어떤 도움이라도 대단히 감사하겠습니다.
@txnelson 썼다:
다음은 STATUS 값을 설정하는 한 가지 방법입니다.매우 효율적인 코드는 아니지만 작동해야 합니다.완전히 테스트할 수는 없었지만 논리는 매우 간단합니다.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);이를 수행하는 더 효율적인 방법을 상상할 수 있지만 이는 공식으로 구현되지 않고 일부 JMP 플랫폼을 사용하는 스크립트로 구현됩니다.
Re: 다른 두 열의 값을 기반으로 새 열을 만드는 방법은 무엇입니까?다음은 STATUS 값을 설정하는 한 가지 방법입니다.매우 효율적인 코드는 아니지만 작동해야 합니다.완전히 테스트할 수는 없었지만 논리는 매우 간단합니다.
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);
이를 수행하는 더 효율적인 방법을 상상할 수 있지만 이는 공식으로 구현되지 않고 일부 JMP 플랫폼을 사용하는 스크립트로 구현됩니다.