본문 바로가기
공부중/1 SAS

SAS 날짜변수, (1-4)분기로 구분하기 [QTR]

by E__E 2020. 3. 15.

기간별 매출액 등을 계산할 때에는 보통 분기별로 나눠서 분석하고는 한다. 

SAS에서 날짜변수를 이용해서 일수 등 기간 계산 뿐 아니라 분기로 구간을 나누는 것도 가능하다. 

 

분기는 아래의 기준으로 나눌수 있다.    

1분기=01,02,03월 / 2분기=04,05,06월/ 3분기=07,08,09월 / 4분기=10,11,12월 

 

SAS에서는 IF조건문을 사용해서 직접 날짜를 구분하는 것도 가능하지만, 

[QTR]이라는 함수를 써서 좀 더 간편하게 계산을 할 수 있다. 

 

다음의 예시를 이용해서 연습해보자. 

데이터셋은 시도명(SIDO), 개설일(Open_date), 개설연도(Open_year) 세가지 변수로 구성되어 있으며,

기간은 2016년~2018년 3개연도이다. 

Dataset 구성

 

이제 각 연도별이 아니라 연도&분기별 빈도를 파악해 보자. 

  >> 새로운 변수명=QTR(날짜변수) 를 써주면 되는데, 날짜변수 자리에 날짜값을 적는것도 가능하다. 

data QTR1; set dataset; 
 OPEN_QTR=QTR(OPEN_DATE);  
 example1_QTR=QTR('03JAN20'd);  
 example2_QTR=QTR('04MAY2020'd);  
run;  

open_qtr=QTR(OPEN_DATE)

결과를 보면 [OPEN_DATE]의 각 날짜의 분기값이 OPEN_QTR에 생성되었다. 

 첫번째행 2018-04-16값은 4월이므로 2분기에 해당 -> OPEN_QTR=2 

 두번째행 2016-09-13값은 9월이므로 3분기에 해당 -> OPEN_QTR=3 

 

그리고 날짜변수를 직접 적어준

 example1_QTR=QTR('03JAN20'd) 는 2020년 1월 3일을 의미하므로 1분기에 해당 -> 1이 출력된다. 

 example2_QTR=QTR('04MAY20'd) 는 2020년 4월 4일을 의미하므로 2분기에 해당 -> 2가 출력된다. 

 

 

** >이제 (시군구X분기) 빈도표를 확인해보면 각 시군구의 분기별로 개설된 기관 수를 확인할 수 있다. 
 그런데 데이터셋이 만약 한개연도에 대한 자료라면 상관 없겠지만, 여러개의 연도가 같이 있는 경우에는 
open_QTR=1 이라는 값 안에는 2016~2018년 1분기의 값이 모두 들어가 있어서 우리가 확인하고자 하는 연도별 분기값이 아니다. 따라서 이때 연도에 대한 구분이 필요하다. 

이런 경우에는 방금 만든 분기변수(Open_QTR)와 연도(Open_YEAR)변수를 합쳐서 새로운 변수를 만드는 작업을 추가하는 방법을 쓰곤 한다. 

data QTR2; set QTR1; 
 OPEN_YR_QTR1=cats(open_year, OPEN_QTR);  
 OPEN_YR_QTR2=catx('-',open_year, OPEN_QTR);  
 OPEN_YR_QTR3=catx(' &',open_year, OPEN_QTR);  
run;  

함수 CATS, CATX

CATS, CATX모두 두 변수를 합치데 사용하는 변수이다. 
차이점은 CATX는 변수를 그냥 합치는 것이고, CATX는 구분자(본인이 지정)를 사용해서 합칠 수 있다. 

위의 경우 구분자 없이 합친 OPEN_YR_QTR1은 연도-분기의 구분이 없이 이어져 한번에 보기 불편하고, 헷갈릴 수 있다. 
따라서 이런 경우에는 CATX를 사용하는 것이 더 유용하겠다. 

이제 새로 만든 변수로 시군구 (시군구X분기) FREQ빈도표를 다시 구해보면 결과는 아래와 같다. 

PROC FREQ DATA=QTR2;

 TABLES SIDO*OPEN_YR_QTR2/norow nocol nopercent; 

RUN; 

최종 결과, 각 시도별 연도-분기별 빈도파악이 가능해졌다. 

 

다른 방법들도 많이 있겠지만, 가장 많이 쓰는 형태로 정리를 해보았다.  

 

-끝-