* 제목 : 다른 데이터 세트와 키 변수의 값이 일치하는 데이터 세트 생성하기.;
* Sample 24768: Subset a data set based on matching a key variable from another data set;
* 출처 : http://support.sas.com/kb/24/768.html;
* 목적 : Hash 오브젝트에 검색(조회) 테이블을 로딩한다.
LARGE 데이터 세트의 모든 관측치에 대하여, Hash 객체에서 키 변수의 값과 일치하는 값을 확인하기 위하여 FIND 매소드를 사용한다.
만약 키 변수의 값과 일치하는 값이 존재하면 해당 관측치를 출력한다.;
data small;
input id name $5. phone x;
datalines;
125 Bob 5550001 1
120 Sue 9991000 3
100 Fran 5552000 4
295 Sam 9991100 2
285 Jeff 5551100 8
275 Ed 9999999 2
300 Ron 5551111 4
;
data large;
do id=100 to 300 by 5;
output;
end;
run;
data match;
/* 데이터 스텝의 PDV 구성을 위하여 Hash 객체에 정의된 변수를 정의한다. */
length id 8 name $5 phone 8;
/* 데이터 스텝의 첫 번째 반복 작업에서 Hash 테이블 H를 생성하고 인스턴트화 한다.
DATASET: 인수 태그를 사용하여서 WORK.SMALL 데이터 세트를 Hash 테이블 H에 로딩한다.
HASH 테이블 검색을 위하여 DEFINEKEY 매소드를 사용하여서 ID 변수를 조회 키 변수로 정의한다.
DEFINEDATA 매소드를 사용하여서 키와 연관된 값으로 NAME,PHONE 변수를 데이터 항목으로 정의한다.
DEFINEDONE 매소드는 HASH 객체 H를 정의하기 위한 작업이 끝마쳤음을 표시한다.
SAS 로그에 "지정된 변수가 초기화되지 않았습니다." 메시지 출력을 방지하기 위하여,
CALL MISSING 구문을 사용하여서 MATCH 데이터 세트의 PDV에서 키 변수와 데이터 항목 변수를 결측치 값으로 초기화한다. */
if _N_ = 1 then do;
declare hash h(dataset: "work.small");
h.defineKey('id');
h.defineData('name','phone');
h.defineDone();
call missing(id, name, phone);
end;
/* SET 구문을 사용하여서 LARGE 데이터 세트에서 관측치를 읽는다. */
set large;
/* FIND 매소드는 Hash 객체 H를 검색하여서 LARGE에서 전달 받은 ID 변수의 값과 일치하는 키 변수의 값을 찾는다.
일치하는 값을 찾으면 반환 코드 Zero(0)을 반환하고, 해당 값을 출력한다. */
rc = h.find();
if (rc = 0) then output;
run;
proc print;
run;
Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.
Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.