BookmarkSubscribeRSS Feed

[HASH Object] 지정한 키 변수 순서로 HASH 테이블 생성 및 SAS 데이터 세트 생성하기

Started ‎06-12-2020 by
Modified ‎06-12-2020 by
Views 121

* 제목 : SAS 데이터 세트를 지정한 키 변수 순서로 정렬하여서 HASH 테이블에 로딩하고,

         키 변수 순서로 새로운 SAS 데이터 세트 생성하기.;

 

* Sample 24653: Load a hash table from a SAS data set specifying key variable order and 

                create a new SAS data set in key variable order;

 

* 출처 : http://support.sas.com/kb/24/653.html;

 

* 목적 : DATASET: 와 ORDERED: 인수 태그를 설명한다.

 

* 참고 : 사용자가 DEFINEKEY 와 DEFINEDATA 매소드에 지정한 변수가 HASH 테이블 저장되고,

         DEFINEDATA 매소드에 지정한 변수가 새로운 데이터 세트에 출력된다.

         새롭게 출력된 WORK.NOORDER 데이터 세트의 순서는 WORK.A의 순서가 아니라,

         HASH 테이블에 배치된 키 값의 순서로 출력된다.;

 

 

data a;

  input key_date mmddyy6. a d no;

  format key_date mmddyy8.;

datalines;

010198 2 3 1

010199 3 2 2

010100 4 1 3

010197 1 4 4

;

 

 

data _null_;

     /* 데이터 스텝의 첫 번째 반복 작업에서 Hash 테이블 ASC, DES와 NOORDER을 생성하고 인스턴트화 한다.

        DATASET: 인수 태그를 사용하여서 WORK.A 데이터 세트를 개별 Hash 테이블 H에 로딩한다.

        HASH 객체에 사용자가 지정한 방식으로 데이터를 로드하기 위하여 ORDERED: 인수를 사용한다.

        HASH 테이블 검색을 위하여 개별 HASH 객체에 대하여 KEY_DATE 변수를 키 변수로 정의하고, 

        A,D, NO 변수를 데이터 변수로 정의한다.

        로그에 "지정된 변수가 초기화되지 않았습니다." 메시지 출력을 방지하기 위하여,

        CALL MISSING 구문을 사용하여서 데이터 세트 변수를 결측치 값으로 초기화한다.

     */

  

     if _n_ = 1 then do;

        declare hash asc(dataset: "work.a", ordered:'ascending');

        asc.definekey('key_date');

        asc.definedata('a','d','no');

        asc.definedone();

 

        declare hash des(dataset: "work.a", ordered:'descending');

        des.definekey('key_date');

        des.definedata('a','d','no');

        des.definedone();

 

        declare hash noorder(dataset: "work.a");

        noorder.definekey('key_date');

        noorder.definedata('a','d','no');

        noorder.definedone();

 

        call missing(key_date,a,d,no);

     end;

  

     /* OUTPUT 매소드를 사용하여서 개별 HASH 객체를 새로운 데이터 세트로 출력하기. */

     rc = asc.output(dataset: 'work.asc');

     rc = des.output(dataset: 'work.des');

     rc = noorder.output(dataset: 'work.noorder');

run;

 

title 'original data set';

proc print data=work.a;

run;

 

title 'ascending data set';

proc print data=work.asc;

run;

 

title 'descending data set';

proc print data=work.des;

run;

 

title 'no order data set';

proc print data=work.noorder;

run;

 

**********************************************************
- 통계분석연구회 
- 카페 : http://cafe.daum.net/statsas
- 통계분석연구회 페이지 : https://www.facebook.com/statsas 

- 통계분석연구회(Statistics Analysis Study) 그룹 :https://www.facebook.com/groups/statsas/

Version history
Last update:
‎06-12-2020 05:29 AM
Updated by:
Contributors

sas-innovate-white.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.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

Article Labels
Article Tags