BookmarkSubscribeRSS Feed

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

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

* 제목 : 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

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags