지식노동자의 노트

SAS 날짜 다루기의 모든 것 Everything about SAS Date 본문

SAS

SAS 날짜 다루기의 모든 것 Everything about SAS Date

생각하는너구리 2012. 5. 8. 01:28
728x90
초심자들, 특히 프로그래밍 경험이 없는 분들이 많이 어려워 하는 부분이 바로 SAS 날짜값 다루기인것 같습니다. 특히 엑셀에서 DATA를 읽어들였을 때, 문자열을 날짜값으로 바꿔서 각종 연산을 하고자 할 때 뜻대로 안되는 경우가 많습니다. 여기서 SAS의 날짜값과 관련된 모든 것(?)을 다루어 보려고 합니다.

사실 몇 가지 기초적인 사실을 정확히 이해하면 참 편리하게 사용할 수 있는 것이 SAS에서 날짜값인데요, 많은 분들이 그냥 문자열로 처리하는 것을 더 선호하시는 편이죠.

앞으로 다음과 같은 질문에 답을 하면서 SAS의 날짜값 다루기를 정복해 보려고 합니다.

1. SAS에서 날짜값은 무엇인가?
2. SAS에서 날짜값은 어떻게 만들어 지는가?
3. 날짜값을 다루는 SAS함수는 어떤 것들이 있고 언제 쓰는가?
4. 기준일을 중심으로 월초, 월말, 연초 등 특정 일자를 자동으로 구하기

그럼 첫번째 질문부터 시작하겠습니다.

1. SAS에서 날짜값은 무엇인가?

SAS  에서 날짜는 정수로 된 숫자입니다. 1960년 1월 1일을 기준으로 그 보다 작으면 음수, 크면 양수로 나타납니다. 다시 말해서 1960년 1월 1일은 0 으로 표현되고 그 보다 1일 늦은 1960년 1월 2일은 1, 1일 빠른 1959년 12월31일은 -1로 표현됩니다. 오늘 2012년5월8일은 19121 입니다.


늘 그렇듯이 샘플 데이타를 입력하는 것으로부터 시작하겠습니다.


data date_sample;

        input var1;
        datalines;
        -2
        -1
        0
        1
        2
        19121
;
run;

<그림1. 평범한 숫자 셋>


변수 var1에 있는 값을 var2에 복사하고 날짜 포멧을 적용하겠습니다.

data
 date_as_num;
        set date_sample;
        var2 = var1;
        format var2 yymmddn8.;
run;
 

<그림2. 숫자와 날짜>


눈에 보이는게 전부가 아니네

첫번째 관측치의 변수 var2에 들어있는 것은 눈에 보이는 것과 달리 숫자 19591230이 아닙니다. 그냥 숫자 -2 입니다.

만약 첫번째 관측치를 선택하게 위해서 if var2 = 19591230; 이라는 조건을 준다면 SAS는 아무런 결과도 내어놓지 않을 겁니다. 


SAS의 날짜가 숫자라는 것은 이해 했는데, 문제는 숫자여야 할 날짜가 숫자가 아닐 때 생깁니다. 저도 대학원 시절 이 점 때문에 엄청 고생을 했던 기억이 있습니다. 엑셀에서 읽어들인 자료나 CSV파일이거나 일반적인 텍스트 파일의 자료를 사용하실 경우 자주 발생하는 경우죠.



<그림3. 비슷하게 보이지만 모두 다 다른 날짜>


Raw data를 읽어들인 후 위와 같이 보기에 비슷하게 생긴 날짜 변수들간의 연산을 시도했다가 끝없이 반복되는 에러에 짜증이 치솟은 경험은 저만 있는 것인지 모르겠습니다. 많은 사람들이 SAS Language를 익힐 때 차근차근 개념부터 배워 나가는게 아니고 특정 프로시져로부터 원하는 결과를 얻기 위해 접근하는 경우가 대부분이기 때문이죠. 

여기서 할 말은 아니지만 SAS Language도 하나의 프로그램 언어를 배우듯이 공부를 해야만 제대로 쓸 수 있습니다. JAVA나 VBA같은 일종의 프로그램 언어라는 점입니다. 통계학 교수님들이 쓰신 많은 교과서에는 단숞히 특정 프로시져를 이용해서 원하는 분석결과를 얻는 방법만 나와 있는 경우가 많지만 그것은 Data가 정확히 그렇게 생겼을 때, 다시말해서 Data가 이미 준비된 경우만 가능합니다.

다시 그림3 으로 돌아와서, 위에서 서로 연산이 제대로 이루어 지는 변수는 하나도 없습니다. 모두가 보기에는 2012년 5월 8일을 나타내는 것 같지만 속을 들여다 보면 모두 다릅니다. 다음 글에서 이 주제에 대해 다뤄 보겠습니다.

반응형
Comments