(Q) 2020년 11월 31일이 “20201131” 과 같이 입력된 숫자형 변수에서
일별, 월별색인을 구하고자 하려면 어떻게 할까요?
날짜형변수를 다루는 date 문이나 yymmdd 문을 사용하기 부담스러우면,
그대로 숫자형이나 문자형으로 읽어 들인 다음, 변형하여 연, 월, 일을 구하면 됩니다.
우선 20201131 을 100으로 나눈 나머지(여기서는 31)를 구하여 날짜로 하면 됩니다.
그리고 20201131 을 100으로 나눈 몫(여기서는 202011)은 연도와 월별을 합친 값이 됩니다.
여기서 202011 을 다시 100으로 나눈 나머지(여기서는 11)를 구하면 월별 데이터가 됩니다.
연도별을 구하려면 20201131을 10,000 으로 나눈 몫(여기서는 2020)을 구하면 연도를 구할 수 있습니다.
/*-------------------------------------------------*/
/* 연, 월, 일을 구하는 프로그램 */
/*------------------------------------------------*/
1 DATA a1;INPUT nal;CARDS;
2 19981211
3 20201131
4 ;
5 DATA a1;SET a1;
6 day=mod(nal,100);
7 mon=int(nal/100);
8 mon1=mod(mon,100);
9 yr=int(nal/10000);
10 PROC PRINT;
11 RUN;
[설명]
6 day=mod(nal,100);
변수 day 에 19981211을 100으로 나눈 나머지 즉 21을 저장합니다.
7 mon=int(nal/100);
변수 mon 에 19981211을 100으로 나눈 몫 즉 198812를 저장합니다.
8 mon1=mod(mon,100);
변수 mon1 mon1에 199812를 100 100으로 나눈 나머지 즉 12를 저장합니다.
9 yr=int(nal/10000);
변수 yr 에 19981211을 10000으로 나눈 몫 즉 1988을 저장합니다.
2020년 11월 31일이 “20201131”과 같이 문자형 변수로 읽어 들여 일별, 월별색인을 구하고자 할 때
문자형의 일부를 추출하는 SUBSTR 함수를 이용하면 됩니다.
/*---------------------------------------------*/
/* 연, 월, 일을 구하는 프로그램 */
/*---------------------------------------------*/
1 DATA a1;INPUT nalja $;
2 CARDS;
3 19981211
4 20030102
5 ;
6 DATA a1;SET a1;
7 yr=SUBSTR(nalja,1,4);
8 mon=SUBSTR(nalja,5,2);
9 day=SUBSTR(nalja,7,2);
10 date_01 = yr* 1000 +mon;
11 PROC PRINT;
12 RUN;
문자를 숫자로 읽어들이는 INPUT 함수(데이터를 읽어들이는 INPUT 문이 아님)를 이용하여
인수를 yymmdd10.과 같이 날짜형 인수를 사용하면 간단하게 문자를 날짜형으로 변경할 수 있습니다.
/*---------------------------------------------*/
/* 연, 월, 일을 구하는 프로그램 */
/* 08_date_input.sas */
/*---------------------------------------------*/
1 DATA a1;INPUT nalja $;
CARDS;
2 19600101
3 19610101
4 ;
5 DATA a1;SET a1;
6 date_01=INPUT(nalja,yymmdd10.);
9 PROC PRINT;
10 RUN;
'SAS연습 200제 > 31. SAS 실습' 카테고리의 다른 글
(S)제31강(01)_날짜형 변수 다루기 - INFORMAT 문 읽고, FORMAT문 출력 (0) | 2021.12.27 |
---|