728x90

(Q) 2020년 11월 31일이 “20201131” 과 같이 입력된 숫자형 변수에서

     일별, 월별색인을 구하고자 하려면 어떻게 할까요?

 

날짜형변수를 다루는 date 문이나 yymmdd 문을 사용하기 부담스러우면,

그대로 숫자형이나 문자형으로 읽어 들인 다음, 변형하여 연, , 일을 구하면 됩니다.

우선 20201131 을 100으로 나눈 나머지(여기서는 31)를 구하여 날짜로 하면 됩니다.

그리고 20201131 을 100으로 나눈 몫(여기서는 202011)은 연도와 월별을 합친 값이 됩니다.

여기서 202011 을 다시 100으로 나눈 나머지(여기서는 11)를 구하면 월별 데이터가 됩니다.

연도별을 구하려면 2020113110,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을 저장합니다.

 

20201131일이 “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;

 

 

 

 

+ Recent posts