아래 코드는 건강보험공단 DB에 사용하였던 코드를 표본코호트 DB에 맞게 변수명을 변형한 것으로, 실제로 적용하기에는 호환이 잘 안 될 수도 있으며 추후 (내가 다시) 참고하려고 작성하였으니 너무 믿지 마시길 바랍니다. (저는 제가 아직도 왜 전공자인지 의심이 됨ㅋㅋ)
코드에 나와 있는 추적관찰기간은 전부 제가 한 실제 분석과 관계 없는 가짜 데이터입니다.
1. 사망연계자료 JOIN하여 전처리 테이블 만들기
PROC SQL;
CREATE TABLE DEATH_TABLE AS
SELECT A.*, B.DTH_YYYYMM
FROM MAIN_DATA_TABLE AS A
INNER JOIN NSC2_BND AS B
ON A.RN_INDI=B.RN_INDI;
QUIT;
PROC SQL;
CREATE TABLE DEATH_TABLE2 AS
SELECT A.*, B.COD1
FROM DEATH_TABLE AS A
INNER JOIN NSC2_BND AS B
ON A.RN_INDI=B.RN_INDI;
QUIT;
PROC SQL; /*사망연계 테이블: 사망일자, 사망원인*/
CREATE TABLE DEATH_TABLE 3 AS
SELECT A.*, B.COD1
FROM DEATH_TABLE AS A
LEFT JOIN DEATH_TABLE2 AS B
ON A.RN_INDI=B.RN_INDI;
QUIT;
2. 중도절단 정의하기
PROC SQL; /*중도절단된 환자: 0(절단), 1(절단 안 됨-사망)*/
CREATE TABLE ALL_CAUSE_DEATH_EX AS
SELECT A.*, B_DTH_YYYYMM, B.COD1,
CASE WHEN B.DTH_YYYYMM IS NULL THEN 0 /*사망연월 없으면 절단*/
WHEN B.COD1 IS NULL THEN 0 /*사망코드 미상이면 절단*/
WHEN LENGTH(B.COD1) > 3 THEN 0 /*질병 외인으로 사망이면 절단*/
WHEN INPUT(B.DTH_YYYYMM, yymmn6.) > INPUT('202012', yymmn6.) THEN 0 /*추적관찰기간 이후 사망이면 절단*/
ELSE 1 /*이외 사망*/
END AS CENSORING,
INPUT(DIAGNOSIS_YEAR, 4.) - INPUT(BTH_YYYY, 4.) AS AGE
CASE /*생존 기간 정의*/
WHEN B.DTH_YYYYMM IS NOT NULL THEN INTCK('month', INPUT(A.FIRST_MDCARE_STRT_DT, yymmn6.), INPUT(B.DTH_YYYYMM, yymmn6.)) /*사망하였을 경우 그 기준*/
ELSE INTCK('month', INPUT(A.FIRST_MDCARE_STRT_DT, yymmn6.), INPUT('202012', yymmn6.)) /*사망하지 않았을 경우 마지막 추적관찰기간*/
END AS SURVIVED_TIME,
FROM MAIN_DATA_TABLE AS A
LEFT JOIN DEATH_TABLE3 AS B
ON A.RN_INDI=B.RN_INDI;
QUIT;
'공부 > SAS' 카테고리의 다른 글
[SAS] CCI (Charlson Comorbidity Index) 지수 계산 (0) | 2024.11.23 |
---|---|
[SAS] Hazard Ratio (HR) Forest Plot 그리기 (0) | 2024.11.23 |
[SAS] 생존분석 (Survival Analysis) - Time-dependent Cox Proportional Hazard Model (0) | 2024.11.22 |
[SAS] 생존분석 (Survival Analysis) - Cox Proportional Hazard Model (0) | 2024.11.22 |
[SAS] 생존분석 (Survival Analysis) - 다중공선성 및 비례위험가정, Kaplan-Meier Plot (0) | 2024.11.22 |