이 포스팅 시리즈는 HIRA 빅데이터 활용 글로벌 인재양성 교육 프로젝트를 준비하며, 「SAS로 하는 기초 데이터 전처리, 핸들링(Data handling)」 및 건강보험심사평가원 자체교재를 바탕으로 학습한 내용을 정리한 글입니다.
1. SAS의 기초
SAS(Statistical Analysis System)는 SAS Institute가 개발한 데이터 관리 및 통계 분석 소프트웨어로, 대용량 데이터 처리와 고급 통계 분석, 리포팅 기능에 특화되어 있습니다. DATA 단계와 PROC 단계로 구성되어 데이터를 조작하고, 복잡한 통계적 수치를 효율적으로 산출하여 비즈니스 인텔리전스 및 예측 분석에 주로 활용됩니다.
2. 라이브러리 지정 - 데이터 풀더 연결하기
1
| LIBNAME TRAINING '/home/u64430397/DATA';
|
SAS에서는 매번 파일 경로를 쓰지 않고 TRAINING.NPS200처럼라이브러리.데이터셋 형식으로 사용한다.
3. DATA Step - 데이터셋 만들기
SAS에서 데이터를 다루는 가장 기본적인 단위는 데이터셋(dataset)이다.
3.1 데이터 복사
1
2
3
| DATA C2_2_full;
SET training.nps200;
RUN;
|
- 의미:
TRAINING.NPS200데이터를 C2_2_full이라는 데이터 셋으로 복사 - 원본을 보존하면서 데이터를 전처리할 때, 분석용 데이터셋을 따로 만들 때 사용한다.
3.2 특정 행만 가져오기
1
| SET training.nps200(firstobs=5 obs=14);
|
- 의미: 5번째 행부터 14번째 행까지 읽기
- 데이터 구조 확인, 샘플 데이터 생성, 디버깅을 할 때 사용
3.3 피요한 변수만 선택
1
| keep spec_id_SNO jid recu_fr_dd recu_to_dd;
|
- 의미: 필요한 열(변수)만 남기고 나머지는 제거
- 메모리 절약, 분석 속도 향상, 가족성 개선
4.데이터 구조 확인 - PROC CONTENTS
1
2
| proc contents data=training.nps200 varnum;
run;
|
- 확인할 수 있는 정보: 변수 이름, 데이터 타입(숫자/문자), 변수 길이, 변수 순서
- 코드형 변수인지, 문자열인지, 날짜인지를 확인할 수 있다.
5. 조건 필터링 - 원하는 데이터만 추출
5.1 성별 필터
5.2 여러 조건 사용
1
| if sex_tp_cd='2' and agg in ('13','14','15','16');
|
- 여성 & 특정 연령대만 추출
and -> 조건 모두 만족, in -> 여러 값 중 하나
6. 새로운 변수 생성 - 데이터 재구성
1
2
| if fom_tp_cd='021' then new_fom_cd='1';
else new_fom_cd='2';
|
- 의미: 기존 변수를 기준으로 새로운 변수 생성
7. 문자열 처리 - 질병 코드 분류
1
| substr(msick_cd,1,1)='J'
|
- 질병 코드의 첫 글자가 J인 경우(호흡기 질환)를 분류할 때 사용한다.
8. 데이터 결합 - 여러 테이블 연결
8.1 세로 결합(행 추가)
8.2 가로 결합 (변수 추가)
1
2
| proc sort data=a; by key; run;
proc sort data=b; by key; run;
|
1
2
3
| merge a(in=a) b(in=b);
by key;
if a;
|
- 의미: 같은 환자 또는 명세서 키 값을 기준으로 서로 다른 테이블의 정보를 결합한다.
9. 중복 제거 - 환자 수 정확히 계산하기
1
2
3
| proc sort data=training.nps200 out=nodup nodupkey;
by jid;
run;
|
- 같은 환자가 여러 번 기록된 경우 1명으로 처리
10. 빈도 분석 - 데이터 분포 파악
1
2
3
4
| proc freq data=training.nps200;
tables sex_tp_cd;
tables sex_tp_cd*insup_tp_cd;
run;
|
- 범주형 변수의 분포를 확인할 때 사용한다.
- 교차표를 통해 변수 간 관계를 파악할 수 있다.
11. 날짜 함수 활용
1
| MON = MONTH(RECU_FR_DD);
|
12. IF vs WHERE 차이
| 구분 | IF | WHERE |
|---|
| 적용 시점 | 데이터 읽은 후 | 읽기 전에 |
| 속도 | 느림 | 빠름 |
| 사용 위치 | DATA Step | DATA Step/ PROC |
13. PROC SQL - 데이터베이스처럼 분석하기
- SAS에서도 SQL문법을 사용해 데이터를 집계할 수 있다.
13.1 화자 수 & 명세 수 계산
1
2
| COUNT(DISTINCT JID)
COUNT(DISTINCT SPEC_ID_SNO)
|
- 중복 제거 후 깁계
13.2 JOIN - 테이블 연결
1
2
| LEFT JOIN NPS400 B
ON A.SPEC_ID_SNO = B.SPEC_ID_SNO
|
13.3 GROUP BY - 질병별 분석
14. 엑설로 결과 저장 - 분석 결과 공유
1
2
3
4
5
| proc export
outfile="파일경로.xlsx"
dbms=xlsx
replace;
run;
|
- 분석 결과를 엑셀 파일로 저장하여 보고서 작성이나 공유에 활용할 수 있다.
Reference