BookmarkSubscribeRSS Feed

[HASH Object] SAS 데이터 세트의 개별 관측치에 대한 다중 조회 작업 수행하기

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

* 제목 : SAS 데이터 세트의 개별 관측치에 대한 다중 조회 작업 수행하기

 

* Sample 24704: Perform multiple lookups for each observation of a SAS data set

 

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

 

* 목적 : HASH 오브젝트에 조회 테이블 로딩하고, 데이터 세트의 개별 관측치에 대하여 다중 FIND 매소드 작업 실행한다.;

 

 

/* HASH 테이블을 검색하기 위하여 이용되는 변수가 FIND 매소드의 개별 호출에 따라 변경됨을 유의하기 바랍니다. */ 

 

data lookup;

  infile datalines truncover;

  input emp_nbr emp_nm $20.;

datalines;

1000 John Ho

1001 Madhu Sundrie

1002 Jim Simpson

1003 Chris Hostess

2003 Rachel Holiday

2005 Mert Demitter

3004 Amit Gong

;

 

data group;

  input emp_nbr1 mgr_id mandir_id Account $6. @23 contract_dt mmddyy10.;

  format contract_dt mmddyy10.;

datalines;

1000 2003 3004 ABC Co 05/04/2002

1001 2005 3004 NBC    06/08/2001

1003 2003 3004 XYZ    01/02/2003

;

 

data final(keep=employee manager mandir account contract_dt);

     length emp_nbr 8;

     length emp_nm $ 20;

 

     /* 데이터 스텝의 첫 번째 반복 작업에서 Hash 테이블 H를 생성하고 인스턴트화 한다.

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

        HASHEXP 인수 태그는 데이터를 저장하기 위하여 이용되는 버켓(buckets)의 개수를 지정한다.

        HASHEXP 인수의 값을 변경하여서 HASH 오브젝트에 대한 검색 속도를 튜닝 할 수 있는데, 

        가장 적합한 버켓을 크기를 결정하기 위하여 다양한 비교 테스트를 수행해야 한다.

 

        HASH 테이블 검색을 위하여 EMP_NBR 변수를 키 변수로 정의하고, 

        KEY 변수와 연관된 데이터 변수로 EMP_NM 변수를 정의한다.

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

        데이터 세트 변수 emp_nbr,emp_nm 변수를 결측치 값으로 초기화한다. */

     if _N_ = 1 then do;

        declare hash h(dataset: "work.lookup", hashexp: 6);

        h.defineKey('emp_nbr');

        h.defineData('emp_nm');

        h.defineDone();

        call missing(emp_nbr, emp_nm);

     end;

 

     set group;

     array name(*) $ 20 employee manager mandir;

     array id(*) emp_nbr1 mgr_id mandir_id;

 

     /* NAME 배열의 모든 원소에 대하여, ID 배열에서 대응하는 값을 EMP_NBR 변수에 할당하여서 검색 작업을 수행한다.

     /* FIND 매소드를 사용하여서 HASH 오브젝트 H에서 해당하는 값에 대한 검색 작업을 수행한다.

     /* HASH 테이블에서 일치하는 값을 찾은 경우(RC=0), 

        데이터 항목 EMP_NM 변수의 데이터 값을 NAME 배열에서 현재 지정한 변수의 값으로 할당한다. */

 

     do i=1 to dim(name);

        emp_nbr=id(i);

        rc=h.find();

        if (rc=0) then name(i)=emp_nm;

     end;

run;

 

proc print;

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:27 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags