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 문을 사용하면 아래와 같은 장점이 있습니다.
데이터 가독성
데이터의 일관성 유지
코드 간소화
재사용 가능
Calling all data scientists and open-source enthusiasts! Want to solve real problems that impact your company or the world? Register to hack by August 31st!