BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [MACRO] 날짜 형태의 파일 이름으로 관리되는 데이터 세트 합치기

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 418

* 데이터이름YYMM 형식의 데이터 세로결합하기;


DATA FYMI0110;
VAR = '200110';
RUN;
DATA FYMI0111;
VAR = '200111';
RUN;
DATA FYMI0112;
VAR = '200112';
RUN;
DATA FYMI0201;
VAR = '200201';
RUN;
DATA FYMI0202;
VAR = '200202';
RUN;
DATA FYMI0203;
VAR = '200203';
RUN;
DATA FYMI0204;
VAR = '200204';
RUN;
DATA FYMI0205;
VAR = '200205';
RUN;

 

* 현황 : 마감 테이블의 파일 이름을 마감년월의 YYMM으로 할당하여 관리;

* 작업 : 다수의 마감 테이블을 하나의 테이블로 자동 결합;

* 세부 : 지정한 시작 년월(START_MON)을 날짜로 변경하여서 1개월씩 중가(INTNX 함수);
* 날짜에서 YYMM 부분을 추출하여 테이블 이름으로 할당(YYMMN4. 출력포맷) -> FYMI + YYMM;
* DO 구문에 SET 구문을 배치하여서 해당하는 테이블들을 반복하여서 결합;


%LET START_MON = 200110;
%LET END_MON = 200203;

 

* 방법1 (반복 DO구문 사용): INTCK 함수를 사용하여서 시작년월과 종료년월의 GAP(월)을 계산 후 MACRO에서 사용;
* MACRO에서 MONTH에서는 따옴표 제거;
%LET GAP= %Sysfunc(INTCK(MONTH,%Sysfunc(InputN(&START_MON.01,YYMMDD8.)),%Sysfunc(InputN(&END_MON.01,YYMMDD8.))) );
* 2001년10월에서 2002년 03월까지의 개월수 체크 : 5개월;
%PUT &GAP=;

* SET 구문을 사용하여서 6개월 동안의 마감 파일 세로결합;
%MACRO BACK;
  DATA BACK1;
    SET %DO I=0 %TO ⪆
         FYMI%SYSFUNC(PUTN(%Sysfunc(INTNX(MONTH,%Sysfunc(InputN(&START_MON.01,YYMMDD8.)),%EVAL‍(&I),END)),YYMMN4.))
             %END;

             ; * SET 구문의 종료 세미콜론;
  RUN;
%MEND;
%BACK;

 

* 방법2 (DO UNTIL구문 사용): 시작년월을 1개월씩 증가시켜서 종료년월과 동일 할때 까지 실행;

* 시작년월을 1개월씩 증가 시켜서 종료년월까지 해당하는 마감파일 결합;

* DO UNTIL구문은 구문 하단에서 조건문을 체크함으로 조건문에 -1로직추가;
* DO UNTIL 구문의 조건절 체크하기 전에 I=0 -> %LET I=1 으로 변경이되므로
* 조건절에서 %EVAL‍(1-1)로 변경 함 -> 당월로 변경;


%MACRO BACK;
  %LET I=0;
  DATA BACK2;
     SET %DO %UNTIL(%SYSFUNC(PUTN(%Sysfunc(INTNX(MONTH,%Sysfunc(InputN(&START_MON.01,YYMMDD8.)),%EVAL‍(&I-1),END)),YYMMN4.))=%Sysfunc(SUBSTR(&END_MON,3,4)));

            FYMI%SYSFUNC(PUTN(%Sysfunc(INTNX(MONTH,%Sysfunc(InputN(&START_MON.01,YYMMDD8.)),%EVAL‍(&I),END)),YYMMN4.))

          %let i = %eval‍(&i+1);
        %END;
        ;
  RUN;
%MEND;
%BACK;

Version history
Last update:
‎06-11-2020 10:10 PM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags