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

SAS 날짜변수 변환 (문자 < > 숫자)

by E__E 2020. 3. 4.

데이터 처리과정에서 시계열자료나, 기간 계산 등 날짜변수를 이용하는 경우가 꽤 많다.

데이터를 불러온 후, 변수를 원하는 날짜형식으로 정리해보자. 

 

*데이터 출처: 공공데이터 포털, (건강보험심사평가원의 요양기관 개설 현황) 

raw데이터 불러오기 결과

 

불러온 데이터셋(open)에서 '개설일자(open_dt)' 변수는 현재 문자로 되어있다.  

 

 

연습1. 2019년 12월 31일의 값을 가지는 END_DT라는 날짜변수 만들기. 

mdy는 날짜지정변수로 변수명=mdy(월,일,연도) 를 쓰면 되는데, 이때 format 문을 함께 써 줘야 우리가 원하는 날짜 형태로 출력이 된다.

(SAS에서는 날짜를 정수로 된 숫자로 인식하고 계산을 한다. 

 1960년 1월 1일을 기준으로 0부터 시작하는 양수로, 기준보다 이전의 날짜는 음수로 표현한다.   
 2019년 12월 31일의 경우 format문을 안쓰면 21914로 출력된다.) 
 format의 형식 또한 본인이 보기 편리한 형태로 지정해줄 수 있다.  

data open1; set open;  
 end_date = mdy(12,31,2019);  
 end_date1=mdy(12,31,2019); format end_date1 yymmdd10.;  
 end_date2=mdy(12,31,2019); format end_date2 yymmdd8. ; 
 end_date3=mdy(12,31,2019); format end_date3 yymmdd6.;  
run

format설정에 따른 결과

위와 같이 format문 설정에 따라 출력되는 결과가 다르고, 본인이 편한형식으로 설정해서 사용하면 되겠다. 

 

만약에 연도,월,일 각각의 값이 하나의 변수로 있을때는 mdy자리에 각각의 변수명을 적어준다.

data ex2; set ex1; 
 end_date=mdy(month,dday,YYYY) ; format end_date yymmdd10.
run; 

mdy('월'변수명,'일'변수명, '연도'변수명)

 

 

연습2. 문자변수를 날짜형식의 숫자변수로 변환하기. 

데이터셋의 문자형식의 '개설일자(open_dt)' 변수를 숫자변수로 변환하고자 할때는 두가지 방법을 가장 많이 쓴다. 

 1) 문자-> 숫자 변환: put 함수. 

 2) 단위별 자리수 추출 : substr(변수명, n번째, n자리 ) 

data z1; set open1;  

open_date1=mdy(substr(open_DT,5,2), substr(open_DT,7,2), substr(open_DT,1,4)) 
    format open_date1 yymmdd10.; 

open_date2=put(end_date1, yymmdd8.);    

run;  

날짜(숫자)변수 변환 

input과 mdy(substr)의 결과가 동일하게 나온다. (위의 결과는 format문 차이) 

하지만 만약 변수가 ('2010년11월20일', '2010-01-27') 이런 식으로 중간에 문자가 함께 있는 경우에는 input함수는 error가 생기므로 substr을 사용하여 변환한다. 

subtr자리수 

  *자리수와 문자를 count할때는 영문, 숫자는 1칸(1byte), 한글은 2칸(2byte)임을 유의한다. 

 

연습3. 날짜변수에서 연도, 월, 일 추출하기. 

data mdy; set opne1;  
 day=day(open_date2); 
 mon=month(open_date2); 
 YR=year(open_date2); 

 mdy1=put(open_date2, 10.);  
 mdy2=put(open_date2, yymmdd10.);  
run ; 

숫자->문자변수로의 변환

날짜변수에서 연도, 월, 일을 각각 하나의 변수로 생성

 일 변수=DAY(날짜변수);

 월 변수=MONTH(날짜변수)

 연도변수=YEAR(날짜변수) 를 쓰면 된다. 

 

전체를 문자변수로 변환하고자 할때는 put의 반대함수인 input을 쓰는데, 이때 자리수를 쓰면 mdy1과 같이 숫자변수에서 format문을 안썼을 때의 날짜 정수계산값이 나온다. 

format문이 적용된 형태와 동일하게 생성하고 싶으면 yymmdd숫자. 를 써준다. (mdy2)
  

연습4. 기간계산. 

같은 날짜형식의 변수에서 일수계산(차이)은 뺄셈으로 바로 계산가능하다. 
앞에서 만든 END_Date변수(기준일)을 사용해서 2019년 12월 31일까지의 설립기간을 계산해보자.

data days; set open1; 
  open_days=(end_date-open_date); 
  open_years=(end_date-open_date)/365; format open_years 10.2;  
run;  

설립일부터 기준일까지 기간계산

위의 명령문에서 format문은 연도계산에서 소수점 2자리까지 표현하기 위해 추가하였다. (안써줘도 괜찮음)

 

오늘도 화이팅 

- 끝^^ -