BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [SET] 다수의 데이터 세트를 합치기 (SET 문장에 대한 단축 리스트)

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

***********************************************;
* SET문장의 단축 리스트 기능 사용;

* SAS9.2 버젼  이후 사용가능 :
***********************************************;

* SES문장 : http://support.sas.com/documentation/cdl/en/lestmtsref/63323/HTML/default/p00hxg3x8lwivcn1f0e9axziw5...;

 

DATA BACK;

 SET BACK1-BACK3;

RUN;

 

  • You can specify groups of ranges.
    set cost1-cost4 cost11-cost14 cost21-cost24; 
  • You can mix numbered range lists with name prefix lists.
    set cost1-cost4 cost2: cost33-37;
  • You can mix single data sets with data set lists.
    set cost1 cost10-cost20 cost30;

     

    ***********************************************;
    * 일반적 데이터문장으로 다수의 데이터세트 SET하기 ;
    ***********************************************;
    data BACK1;
         a=1;
    run;
    data BACK2;
         a=2;
    run;
    data BACK3;
         a=3;
    run;

    data BACK;
         ARRAY X[*] $ var1-var3;
         length var4 $100.;
         * BACK1 BACK2 BACK3을 가로로 배치;
         do i=1 to 3;
            x[i] =compress("BACK"||i);
         end;
         * 하나의 변수화 작업;
         var4 = cat(of var:);
         * 매크로 변수로 할당;
         call symput('BACK',var4);
    run;

    * set문에 들어갈 문장을 로그에 출력하여 확인;
    %put &BACK;

    data BACK4;
     set &BACK;
    run;

    ********************************************;
    * Macro 사용하기1                           ;
    ********************************************;
    %macro set();
      %let var1 =;
      %do i = 1 %to 3;
          %let var1 = &var1 BACK&i;
      %end;
      data BACK;
       set &var1;
      run;
    %mend;
    %set()

    ********************************************;
    * Macro 사용하기2                            ;
    ********************************************;
    %macro BACK();
      data BACK;
           %do i=1 %to 3;
                   set BACK&i;
                  output;
           %end;
      run;
    %mend;
    %BACK;

     

    ********************************************;
    * 테이블명 관리 테이블(VTABLE)                     ;
    ********************************************;

    DATA TEST;
    SET SASHELP.VTABLE END=END;
         length var $100.;
         RETAIN VAR;
         IF INDEX(memname,'BACK')>0 THEN VAR = TRIM(VAR)||' '||TRIM(memname);
         ELSE VAR=VAR;
         IF END THEN CALL SYMPUT('LIST',VAR);
         WHERE libname='WORK';
    RUN;

    %PUT &LIST;

    DATA TOTAL1;
     SET &LIST;
    RUN;

     

    ********************************************;
    * 테이블명 관리 테이블(DICTIONARY)               ;
    ********************************************;

     

     

    PROC SQL NOPRINT;
      SELECT memname INTO :LIST1 separated by ' '
      FROM   dictionary.tables
      WHERE  libname='WORK'
           AND  memname LIKE 'BACK%';
    QUIT;

    %PUT &LIST1;

    DATA TOTAL2;
     SET &LIST;
    RUN;

     

     

    [참고]

    * [SAS 변수 리스트] SAS 변수 단체(요약) 지정 : http://cafe.daum.net/statsas/3F8j/187
Version history
Last update:
‎06-11-2020 09:15 PM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags