지식노동자의 노트

SAS 날짜값 다루기(생성 및 변형) 본문

SAS

SAS 날짜값 다루기(생성 및 변형)

생각하는너구리 2012. 6. 12. 08:39
728x90

이번에는 SAS에서 날짜값을 어떻게 만들 수 있는지에 대해서 얘기 해 보겠습니다.


1. 외부데이타로부터 Informats을 사용해서 생성

2. 기존 날짜값 SAS 변수를 변형해서 생성

3. 숫자나 문자로부터 SAS 날짜 함수를 사용해서 생성


SAS에서 날짜 변수를 만들어 내는 상황은 크게 위 3가지 상황으로 나누어 볼 수 있습니다. 그럼 각각 어떤 경우인지 알아보죠.


1. 외부데이타로부터 Informats을 사용해서 생성


사실 처음부터 제대로된 날짜변수를 생성한다는 의미에서 이 단계가 가장 중요합니다. 외부에서 값을 읽을 때, 처음부터 날짜를 날짜로 읽어들이지 못하고 문자나 숫자로 읽어 들이기 때문에 나중에 이것을 억지로 연산하려고 하다 보면 무수한 형변환을 거치고도 어이 없는 결과가 나오는 수가 허다합니다.


예를 들어 보겠습니다. 아래와 같은 Raw Data를 가지고 있다고 가정합니다. (엑셀이나 Test파일 등 여러가지  Raw Data로 부터 다양한 data를 읽어들이는 방법에 대해서는 따로 포스팅 예정입니다.)


data _date_test;
        input @1  date1 date9.
              @11 date2 8.
              @20 date3 $8.
              @29 date4 IS8601DA.;
datalines;
20jun2012 20120620 20120620 2012-06-20
20may2012 20120520 20120520 2012-05-20
;
run;




앞서서 SAS의 날짜란 '숫자'라고 강조한 바 있습니다. 즉, date 값이라면 숫자 1은 1day(일)을 의미하는 것이고 datetime 값 이라면 숫자 1은 1second(초)를 의미하는 겁니다. 그렇다면 위에서 처럼 2012년6월20일로 표현하고 싶은 data (그것을 20jun2012로 가지고 있든, 20120620 또는 2012-06-20 이든)를 SAS에게 숫자 19164(1960년1월1일에서 19164일째)로 인식시켜야 합니다. 위에서 date1, date4 는 제대로 된 경우지만 date2는 숫자 2천12만6백2십, date3은 문자열 '20120620'일 뿐입니다. date2, date3은 변형을 거치지 않고서는 겉으로 보기에만 날짜값 처럼 보일 뿐, 아무런 의미도 없습니다. 다음 코드를 실행시켜서 date1, date4에 format을 입혀 보겠습니다.



data
 _fmtd_date;
        set _date_test;
        format date1 date4 yymmddn8.;
run;

<그림2. Format입은 날짜>


어떻습니까? 이해가 되시나요? date1, date2를 연산하려고 하면 안되겠죠? 날짜는 숫자라는 사실, 꼭 기억하세요.



 

반응형
Comments