* http://cafe.daum.net/statsas/3F8j/270
* Sample 24594: Count the number of items in a hash table;
* 출처 : http://support.sas.com/kb/24/594.html;
data test;
input key1 key2 data1;
datalines;
1 1 11
1 1 22
1 2 12
1 2 122
;
* HASH BOJECT는 기본적으로 KEY 값을 기준으로 중복을 허용하지 않는다.;
* 중복 관측치 사용을 위한 특정 옵션을 지정하지 않고, HASH TABLE을 생성하면 HASH 테이블에는;
* 개별 KEY 값을 기준으로 첫번째 관측치가 로드된다.;
data _null_;
if _n_ = 1 then do;
* h hash object 정의;
declare hash h(dataset: "work.test");
* key 값 정의;
h.definekey('key1','key2');
* hash object에 생성되는 data 항목 정의;
h.definedata('KEY1','KEY2','data1');
* 위에서 생성한 데이터를 로딩하여 hash object 생성;
h.definedone();
call missing(key1, key2, data1);
end;
* SAS 데이터 세트 출력;
rc = h.output(dataset: "work.BACK");
run;
data nodups;
/* 첫 번째 반복 작업을 수행하면서 HASH Object H를 선언.
HASH 테이블 H에 WORK.TEST 데이터를 로드.*/
if _n_ = 1 then do;
dcl hash h(dataset:'work.test');
h.defineKey('key1', 'key2');
h.definedata('data1');
h.defineDone();
/* "변수 'data1'이(가) 초기화되지 않았습니다." 메시지 출력을 방지하기 위하여,
데이터 세트 변수 KEY1, KEY2 와 DATA1 변수를 결측치 값으로 초기화 */
call missing(key1, key2, data1);
end;
/* Assign values to the data set variables KEY1 and KEY2 */
key1=1;
key2=1;
/* FIND 매서드를 사용하여서 HASH Object H에서 일치하는 KYE1과 KEY2을 찾는다.(KEY1=1 AND KEY2=1)
일치하는 값을 발견하면 RC에 ZERO(0)값을 반환한다.*/
rc=h.find();
* NUM_ITEMS 속성은 HASH Object H에서 데이터 항목의 개수를 totalitems 데이터 세트 변수로 할당한다.;
totalitems = h.num_items;
/* DATA1과 위에서 생성한 TOTALITEMS 변수의 값을 LOG에 출력 */
put data1=;
put totalitems=;
run;
* KEY : 'key1', 'key2', 'data1';
* KEY를 기준으로 중복을 제거한 유일한 관측치 값의 개수 카운트;
data dups;
if _n_ = 1 then do;
dcl hash h(dataset:'work.test');
h.defineKey('key1', 'key2', 'data1'); * 키값 정의;
h.defineDone();
call missing(key1, key2, data1);
end;
totalitems = h.num_items;
put totalitems=;
run;
***********************************************************
- 통계분석연구회
- 카페 : http://cafe.daum.net/statsas
- 통계분석연구회 페이지 : https://www.facebook.com/statsas
- 통계분석연구회(Statistics Analysis Study) 그룹 :https://www.facebook.com/groups/statsas/
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!