BookmarkSubscribeRSS Feed

[HASH Object] key 값을 기준으로 다중 데이터 항목을 허용하는 hash 테이블에서 항목의 개수를 카운트하기

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

* 제목 : key 값을 기준으로 다중 데이터 항목을 허용하는 hash 테이블에서 항목의 개수를 카운트하기.;

 

* Sample 34757: Count the number of items in a hash table, allow multiple data items per key;

 

* 출처 : http://support.sas.com/kb/34/757.html;

 

* 목적 : (SAS 9.2 이후 사용가능)

         NUM_ITEMS 속성과 HAS_NEXT, FIND_NEXT 매소드를 사용하여서 HASH 오브젝트에 다수의 중복된 키 값을 포함 할 수 있는 방법을 설명한다.

         DECLARED으로 HASH 테이블 선언 시 MULTIDATA 인수를 포함하여 선언되었다.

 

* 참고 : SAS 9.1 이전에서는 Key 값을 기준으로 다중 항목을 허용하지 않기 때문에, 항목의 값은 유일해야 한다.

         => Sample 24594: Count the number of items in a hash table;

 

 

 

data test;

  input key1 key2 data1;

datalines;

1 1 11

1 1 22

1 2 12

1 2 122

;

 

/***************************************************************************/

/* HASH 오브젝트는 기본적으로 KEY 변수에 대하여 중복을 허용하지 않는다.    */

/* WORK.TEST는 KEY1과 KEY2 변수를 기준으로 중복값이 존재한다. 이 경우 개별 */

/* 키 값(조합)의 첫번째 값이 HASH 테이블 H에 로딩된다.                     */

/***************************************************************************/ 

 

data nodups;

 

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

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

        일치하는 값을 찾기 위하여 CAP 변수를 키(KEY) 변수로 정의한다.

        또한, CPA 변수를 출력하기 위하여 데이터 항목으로 정의한다. 

        KEY1과 KEY2 변수를 키 변수로 정의하고, HASH 테이블에서 데이터 항목으로 DATA1을 저장한다.

 

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

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

 

     if _n_ = 1 then do;

        dcl hash h(dataset:'work.test');

        h.defineKey('key1', 'key2');

        h.definedata('data1');

        h.defineDone();

        call missing(key1, key2, data1);

     end;

 

     /* 데이터 세트 변수 KEY1와 KEY2에 데이터 값 할당 */

     key1=1;

     key2=1;

 

     /* FIND 매소드를 사용하여서 HASH 오프젝트 H에서 KEY1과 KEY2 변수의 값과 일치하는 

        값을 찾는다 */

     rc=h.find();

 

     /* NUM_ITEMS 속성을 사용하여서 HASH 오브젝트 H에 존재하는 항목의 개수를 반환하여서, 

        이 값을 데이터 세트 변수 TOTALITEMS에 할당한다. */

     totalitems = h.num_items;

 

     /* 로그에 DATA1과 TOTALITEMS 값을 출력한다. */

     put data1=; 

     put totalitems=;

run;

 

 

/************************************************************************/

/* 다음 예제에서는 KYE1,KEY2 변수가 키 변수로 정의되었다.               */

/* In this sample KEY1, KEY2 and DATA1 are defined as keys.             */

/* multidata: 인수를 지정하여서 중복된 값의 로딩이 가능하다.            */

/************************************************************************/

 

data dups ;

     if _n_ = 1 then do;

        dcl hash h(dataset:'work.test', multidata:'yes');

        h.defineKey('key1', 'key2');

        h.definedata('data1');

        h.defineDone();

        call missing(key1, key2, data1);

     end;

     /* 데이터 세트 변수 KEY1와 KEY2에 데이터 값 할당 */

     key1=1;

     key2=1;

 

     /* FIND 매소드를 사용하여서 HASH 오프젝트 H에서 KEY1=1과 KEY2=1 변수의 값과 일치하는 

        값을 찾는다. 일치하는 값을 발견하면 zero(0)값을 반환한다. */

     rc=h.find();

     rc = h.has_next(result:R);

     /* 키 값을 기준으로 중복값이 존재하면, 다음 키 값을 발견하기 전까지 중복값을 출력한다. */

     do while (rc = 0);

        put key1= key2= data1=;

        rc = h.find_next();

     end;

 

     /* 로그에 DATA1의 값과 TOTALITEMS 값을 출력한다. */

     put data1=;

     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/
Version history
Last update:
‎06-12-2020 05:26 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.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. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags