본문 바로가기
Programming/SAS

[SAS 기초] 데이터 생성과 처리 관련 구문

by Kanii 2022. 3. 23.
반응형

이번 포스팅에서는 SAS 기초 문법을 살펴보겠다.

 

- 앞으로는 동일한 주제에 대해서 SAS, R, Python 버전으로 모두 포스팅 하려고 합니다. 3가지 버전으로 모두 포스팅이 완료되는대로 글 마지막에 링크를 걸어둘테니 다른 프로그램 버전이 보고싶으시다면 아래 링크를 참고해주세요. - 

 

* 사용 환경

필자는 SAS 프로그래밍을 위해 SAS OnDemand for Academics을 사용하고 있다.

SAS에서 학습용으로 무료로 사용할 수 있도록 만들어준 SAS studio 환경이다.

https://welcome.oda.sas.com/home

 

SAS OnDemand for Academics

 

welcome.oda.sas.com

위 링크에서 이메일로 간단히 프로필을 설정한 뒤, sas studio를 누르면 자유롭게 사용이 가능하다.

 

++ 추가로, sas studio에 접속한 뒤, Snippet 탭을 누르게 되면 다양한 소스 코드들을 살펴 볼 수 있다!


1. 라이브러리 생성

 

 SAS에서 라이브러리란 쉽게 말하자면, R과 Python에서 워킹디렉토리(working directory)와 비슷하다.

SAS에서는 따로 라이브러리를 설정하지 않으면, "work"라이브러리에서 모든 작업을 수행하게 되는데, work 라이브러리에서 생성된 데이터들은 프로그램을 재시작하게 될 경우 모두 사라지게된다.

 

하지만 라이브러리를 따로 생성한 뒤 해당 라이브러리에 데이터를 저장해두면, 후에 해당 라이브러리를 다시 할당할 겨우, 그 라이브러리 안에 저장해둔 데이터들도 다시 불러와진다.

 

라이브러리를 설정하는 방법은 다음과 같다.

libname 라이브러리명 '경로';

라이브러리 경로 같은 경우, SAS enteprise guide를 사용한다면 로컬 파일 경로를 설정하면 되며,

SAS studio를 사용할 경우 > 서버 파일 및 폴더> 파일(홈) 아래에 있는 파일명을 경로로 삼으면 된다.

libname testlib '/home/~~~~~/sasuser.v94';

설정 한 뒤, SAS studio>라이브러리 탭을 살펴보면 라이브러리가 정상적으로 생성되어 있는 것을 확인 할 수 있다.


2. 데이터 생성

 

 SAS에서 데이터는 data 구문을 통해 생성할 수 있다. 코드로 살펴보자

DATA 라이브러리.데이터명; /* 라이브러리를 설정하지 않으면 자동으로 work 라이브러리에 생성된다.*/
INPUT 문자형변수1 $ 문자형변수2 $ 숫자형변수1 숫자형변수2;
         /*데이터에 포함되는 변수 명과 변수 형태를 선언한다.*/
         /* 문자형 변수는 한 칸 띄고 '$' 표시를 해준다*/
LABEL 변수 = 라벨; /*변수에 라벨을 부여한다. -> 데이터 생성을 위한 필수 구문은 아님.*/

CARDS;
데이터 값 /* 데이터에 포함되는 값들을 넣어준다*/
;
run/*실행 구문, SAS의 모든 프로시저 끝엔 반드시 run이 들어가야한다.*/

++참고, SAS의 주석은 /**/으로 처리한다. 모든 구문 끝은 세미콜론(;)으로 마무리한다.

 

위의 코드 형식을 참고하여 아래와 같은 데이터를 만들어보자.

데이터 생성 예제

Data MYSAS.ex1; /*라이브러리명.데이터이름*/
input name $10. sex $ dept $ age height weight; 
Label name='이름' sex='성별' dept='학과'
age='나이' height = '키' weight = '몸무게';
 
Cards;
김철수 M Stat 25 170 67
강민호 M Stat 20 169 70
최병호 M Math 28 177 62
이영희 F Math 19 160 58
박지수 F Econ 21 160 59
;
run;
/* 생성된 데이터를 출력하는 프로시저 스텝*/
proc print data=MYSAS.ex1;
run;

3. 데이터 불러오기

 

위에서 데이터를 직접 생성하는 방법을 살펴보았다면, 이번에는 외부 데이터파일을 불러오는 방법을 살펴보겠다.

DATA 라이브러리.데이터명;
LENGTH 문자형변수1 $ 변수길이1 숫자형변수 변수길이2;
INFILE '경로' dlm='구분자';
INPUT 문자형변수 $ 숫자형변수;
RUN;

LENGTH 구문은 불러올 데이터의 변수 길이를 지정하는 구문이다.

변수 길이 설정이 성공적으로 적용되려면 LENGTH 구문이 반드시 INPUT 구문 앞에 사용되어야하며, 변수 길이 지정이 필요없다면 생략해도 데이터는 정상적으로 불러와진다.

 

위의 코드를 참고하여 아래와 같은 .txt 파일을 불러와보자.

test.txt

/* 라이브러리명 : MYSAS */
data MYSAS.test;
infile '~/test.txt' dlm=' '; /*이 문서의 구분자는 스페이스 ' '*/
length name $ 10 sex $ 2 major $ 10 age 3 height 3 weight 3;
input name $ sex $ major $ age height weight;
run;
/* SAS Studio를 사용할 경우, 로컬파일을 studio서버에 먼저 올려놓은 뒤 불러오기를 진행 해야함. */
 
proc print data=Mysas.test;
run;

데이터 불러오기 결과


4. 변수 이름 바꾸기

 

먼저 데이터의 변수명을 바꿀 수 있는 구문 RENAME을 살펴보자.

DATA 라이브러리.데이터명;
SET 데이터; /*변수명을 바꿀 데이터*/
RENAME 기존 변수명 = 새 변수명;
RUN;

위 구문을 사용하여, ex1데이터의 변수 sex의 이름을 gender로 바꿔보자.

/* 변수 이름 바꾸기 */
data test2;
set MYSAS.ex1;
rename sex=gender; /*sex->gender*/
run;

proc print data=test2;
run;

RENAME 결과

SAS에서는 기존에 생성한 데이터를 변경하기 위해서 SET 구문을 사용한다.

SET 구문을 통해 기존 데이터를 불러오고, 그 다음으로 원하는 형태로 데이터를 변경해준다.


5. 변수 유지/ 제거

 

SAS에서는 변수를 유지하기 위해 KEEP을, 제거하기 위해 DROP 구문을 사용하게 된다. 두 구문의 용법은 동일하므로 본 포스팅에서는 KEEP 구문만을 예제로 설명하겠다. 

 

KEEP 구문은 두 가지 방법으로 사용할 수 있다.

DATA 라이브러리.데이터명(KEEP = 변수1 변수2);
SET 기존데이터;
RUN;
DATA 라이브러리.데이터명;
SET 기존데이터(KEEP = 변수1 변수2);
RUN;

첫 번째 방법은 기존데이터를 모두 불러온 후, (변수1, 변수2)만을 선택하여 새로운 데이터를 생성 하는 것이며,

두 번째 방법은 기존데이터에서 (변수1, 변수2)만을 불러온 후, 불러온 형태를 새로운 데이터로 생성하는 것이다.

 

그저 KEEP 구문만 사용할 경우에는 두 방법이 동일한 결과를 보여주지만, 원하는 결과에 따라 정확한 방법으로 사용하는 것이 중요하다.

 

예를 들어, 다음과 같은 데이터에서 변수 score에 따라 grade를 부여한 뒤, [name, major, grade]만을 포함하는 데이터 'newdata'를 생성해보자.

예제 데이터

변수 grade는 간단히 70점을 기준으로 $score\geq 70$이면 Pass, $score<70$이면 Fail로 생성하였다.

 

KEEP 구문의 첫 번째 용법을 사용하면 아래와 같이 정상적으로 newdata가 생성된 것을 확인 할 수 있다.

DATA newdata(KEEP= name major grade);
SET MYSAS.TEST2;
IF score>=70 then grade='Pass';
ELSE grade='Fail';
RUN;

PROC PRINT DATA=newdata;
RUN;

첫 번째 KEEP 용법

 

그렇다면, 두 번째 용법을 사용하면 어떨까?

DATA newdata;
SET MYSAS.TEST2(KEEP= name major);
IF score>=70 then grade='Pass';
ELSE grade='Fail';
RUN;

PROC PRINT DATA=newdata;
RUN;

두 번째 KEEP 용법

출력된 결과를 살펴보면, 기존의 TEST2 데이터에서 score 변수를 불러오지 못해 grade 변수 역시 제대로 생성되지 못한 것을 확인 할 수 있다.


이번 포스팅에서는 SAS에서 데이터를 생성/불러오고 변수들을 처리하는 간단한 구문을 알아보았다.

다음번 포스팅에서는 SAS의 반복/조건문을 살펴보겠다.

 


> R 버전

2022.03.25 - [Programming/R] - [R 기초] 데이터 객체 생성 및 처리 관련 구문

 

[R 기초] 데이터 객체 생성 및 처리 관련 구문

이번 포스팅에서는 '데이터 객체 생성 및 처리 관련 구문'에 대한 R 기초 문법을 살펴보겠다. - 동일한 주제에 대한 SAS,Python 포스팅을 보고싶으시다면 아래 링크를 참고해주세요- * 사용 환경 필

harang3418.tistory.com

 

> Python 버전

2022.04.14 - [Programming/Python] - [Python 기초] 데이터 객체 생성 및 처리 관련 구문

 

[Python 기초] 데이터 객체 생성 및 처리 관련 구문

이번 포스팅에서는 데이터 생성 및 처리에 관련한 Python 기초 구문들을 살펴보겠다. * 사용 환경 필자는 Python 프로그래밍을 위해 Jupyter notebook을 사용하고있다. (주변에 파이썬을 자주 사용하시는

harang3418.tistory.com

반응형

댓글