SAS에는 다양한 기본 숫자, 문자, 날짜/시간 포맷이 있습니다.
하지만 특정 조건에 따라 데이터를 다르게 표현해야 할 때가 있습니다.
이럴 때 사용자 정의 형식(Customized Format)을 사용하여 데이터를 사용자가 원하는 대로 정의할 수 있습니다.
개개인의 건강정보와 심장 질환 관련된 정보가 포함된 가상의 Heart 데이터와 예제를 통해서 사용자 정의 포맷에 대해서 알아보겠습니다.
데이터는 5,209개의 데이터와 17개의 칼럼으로 구성되어 있습니다.
Status: 생존(Alive) 또는 사망(Dead) 여부.
DeathCause: 사망했을 경우 사망 원인.
AgeCHDdiag: 심장 질환 진단을 받은 나이.
Sex: 성별.
AgeAtStart: 데이터 수집을 시작했을 당시의 나이.
Height: 신장.
Weight: 체중.
Diastolic: 이완기 혈압.
Systolic: 수축기 혈압.
MRW: Metropolitan Relative Weight (메트로폴리탄 상대 체중) 지수.
Smoking: 흡연량(담배 개비 수).
AgeAtDeath: 사망했을 당시의 나이.
Cholesterol: 콜레스테롤 수치.
Chol_Status: 콜레스테롤 상태(Desirable, Borderline, High).
BP_Status: 혈압 상태(Optimal, Normal, High).
Weight_Status: 체중 상태(Normal, Overweight, Underweight 등).
Smoking_Status: 흡연 상태(Non-smoker, Moderate, Heavy 등).
이 데이터셋은 환자의 상태, 주요 건강 지표(혈압, 콜레스테롤), 그리고 생활 습관(흡연, 체중) 등의 정보를 종합적으로 담고 있어 심장 질환과 관련된 위험 요인을 분석하는 데 사용될 수 있습니다.
데이터는 NULL 값인 것도 있으며 . 로 구성된 데이터도 있습니다.
Status 변수가 Alive인 사람들은 아직 생존해 있기 때문에, AgeAtDeath (사망 당시 나이)와 DeathCause (사망 원인) 변수에 값이 있을 수 없습니다. 이 경우 결측치는 '해당 없음(Not Applicable)'을 의미합니다.
Systolic(수축기 혈압)의 데이터를 가지고 정상(Normal), Prehypertenstion(고혈압 전단계), Hypertension(고혈압) 분류해 SystolicStatus라는 새로운 칼럼을 만들어 보겠습니다.
분류의 기준은 아래와 같습니다.
- Normal(정상): 120 미만
- Prehypertension(고혈압 전단계): 120이상 139이하
- Hypertension(고혈압): 140 이상
방법1. 조건문 IF-ELSE IF 구문을 사용하여 수축기 혈압 값에 따른 분류
data test;
set work.heart;
if Systolic < 120 then SystolicStatus = "Normal";
else if 120 <= Systolic <= 139 then SystolicStatus = "Prehypertension";
else if Systolic >= 140 then SystolicStatus = "Hypertension";
else SystolicStatus = "Missing";
run;
Systolic에 따라 SystolicStatus라는 새로운 칼럼값이 새로 생성된걸 확인할 수 있습니다.
IF-THEN-ELSE 구문을 사용하면, 아래와 같은 장점이 있습니다.
더 명확하고 직관적
데이터에 실제 텍스트 값이 저장됨
포맷 의존성 없이 다른 프로시저에서도 사용 가능
디버깅이 쉬움
방법2. PROC FORMAT 문 활용하기
proc format;
value systolicStatus
low-<120 = "Normal"
120-139 = "Prehypertension"
140-high = "Hypertension"
. = "Missing";
run;
data test2;
set work.heart;
format Systolic SystolicStatus.;
run;
PROC Format 문을 사용하면 아래와 같은 장점이 있습니다.
데이터 가독성
데이터의 일관성 유지
코드 간소화
재사용 가능
Nearly 200 sessions are now available on demand in the Innovate Hub.
Watch Now →