* 제목 : SAS 데이터 세트를 지정한 키 변수 순서로 정렬하여서 HASH 테이블에 로딩하고,
키 변수 순서로 새로운 SAS 데이터 세트 생성하기.;
* Sample 24653: Load a hash table from a SAS data set specifying key variable order and
create a new SAS data set in key variable order;
* 출처 : http://support.sas.com/kb/24/653.html;
* 목적 : DATASET: 와 ORDERED: 인수 태그를 설명한다.
* 참고 : 사용자가 DEFINEKEY 와 DEFINEDATA 매소드에 지정한 변수가 HASH 테이블 저장되고,
DEFINEDATA 매소드에 지정한 변수가 새로운 데이터 세트에 출력된다.
새롭게 출력된 WORK.NOORDER 데이터 세트의 순서는 WORK.A의 순서가 아니라,
HASH 테이블에 배치된 키 값의 순서로 출력된다.;
data a;
input key_date mmddyy6. a d no;
format key_date mmddyy8.;
datalines;
010198 2 3 1
010199 3 2 2
010100 4 1 3
010197 1 4 4
;
data _null_;
/* 데이터 스텝의 첫 번째 반복 작업에서 Hash 테이블 ASC, DES와 NOORDER을 생성하고 인스턴트화 한다.
DATASET: 인수 태그를 사용하여서 WORK.A 데이터 세트를 개별 Hash 테이블 H에 로딩한다.
HASH 객체에 사용자가 지정한 방식으로 데이터를 로드하기 위하여 ORDERED: 인수를 사용한다.
HASH 테이블 검색을 위하여 개별 HASH 객체에 대하여 KEY_DATE 변수를 키 변수로 정의하고,
A,D, NO 변수를 데이터 변수로 정의한다.
로그에 "지정된 변수가 초기화되지 않았습니다." 메시지 출력을 방지하기 위하여,
CALL MISSING 구문을 사용하여서 데이터 세트 변수를 결측치 값으로 초기화한다.
*/
if _n_ = 1 then do;
declare hash asc(dataset: "work.a", ordered:'ascending');
asc.definekey('key_date');
asc.definedata('a','d','no');
asc.definedone();
declare hash des(dataset: "work.a", ordered:'descending');
des.definekey('key_date');
des.definedata('a','d','no');
des.definedone();
declare hash noorder(dataset: "work.a");
noorder.definekey('key_date');
noorder.definedata('a','d','no');
noorder.definedone();
call missing(key_date,a,d,no);
end;
/* OUTPUT 매소드를 사용하여서 개별 HASH 객체를 새로운 데이터 세트로 출력하기. */
rc = asc.output(dataset: 'work.asc');
rc = des.output(dataset: 'work.des');
rc = noorder.output(dataset: 'work.noorder');
run;
title 'original data set';
proc print data=work.a;
run;
title 'ascending data set';
proc print data=work.asc;
run;
title 'descending data set';
proc print data=work.des;
run;
title 'no order data set';
proc print data=work.noorder;
run;
**********************************************************
- 통계분석연구회
- 카페 : http://cafe.daum.net/statsas
- 통계분석연구회 페이지 : https://www.facebook.com/statsas
- 통계분석연구회(Statistics Analysis Study) 그룹 :https://www.facebook.com/groups/statsas/
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.