Post

[SAS] 1. SAS의 기초

HIRA 빅데이터 활용 글로벌 인재양성 교육

[SAS] 1. SAS의 기초

이 포스팅 시리즈는 HIRA 빅데이터 활용 글로벌 인재양성 교육 프로젝트를 준비하며, 「SAS로 하는 기초 데이터 전처리, 핸들링(Data handling)」1 및 건강보험심사평가원 자체교재를 바탕으로 학습한 내용을 정리한 글입니다.


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 성별 필터

1
if sex_tp_cd='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 세로 결합(행 추가)

1
set data1 data2;
  • 두 데이터셋을 위아래로 붙임

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 차이

구분IFWHERE
적용 시점데이터 읽은 후읽기 전에
속도느림빠름
사용 위치DATA StepDATA Step/ PROC
  • 대용량 데이터에서는 WHERE가 효율적

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 - 질병별 분석

1
GROUP BY 질병코드
  • 질병군별 환자 수 분석

14. 엑설로 결과 저장 - 분석 결과 공유

1
2
3
4
5
proc export
  outfile="파일경로.xlsx"
  dbms=xlsx
  replace;
run;
  • 분석 결과를 엑셀 파일로 저장하여 보고서 작성이나 공유에 활용할 수 있다.

Reference

  1. SAS로 하는 기초 데이터 전처리, 핸들링(Data handling) https://wikidocs.net/book/2678 ↩︎

This post is licensed under CC BY 4.0 by the author.