SAS에서 Index 만드는 3가지 방법
SAS에서 조회를 많이하는 Key가 되는 것을 미리 Index로 만들거나 View를 만들면 join과 subset 데이터생성으로 인한 불필요한 디스크 공간을 절약하고 I/O의 감소로 SAS의 성능향상을 가져올 수 있습니다.
- Index 는 데이터가 새롭게 생성되지 않고 실제 sorting되는 것이 아니라서 원래 데이터의 변형은 없습니다.
- 다양한 정렬형태의 index를 2개이상의 변수로 만들어진 composite index와 하나의 변수인 single index가 있습니다.
- Index를 만들었을때 무조건 검색이 빠르다고 할 수 없으며 사용되는 데이터가 15%이하 일때 가장 효과적이라고 알려져 있습니다.
- Where 구문으로 데이터를 조건 검색할때 index는 유용하고 IF 문을 사용할때에는 index는 성능향상에 기여하지 않습니다.
이제 SAS에서 3가지 방법으로 Index 만드는 방법을 알아보겠습니다.
Ex. test_data 데이터에서 검사일자(exam)+나이(age)의 index와 생일(birth)로 index를 생성해 보겠습니다.
Data Step 이용하여 Index 생성하기
< SAS Code >
/* Single Index */
data test_index1 (index=(birth));
set test.test_data;
run;
proc contents data=test_index1;run;
/* Composite Index */
data test_index2 (index=(ExamAge=(Exam Age)));
set test.test_data;
run;
proc contents data=test_index2;run;
- (index=(ExamAge=(Exam Age)/unique/nomiss)) 를 사용하면 exam+age 조합의 unique한 index를 생성할수 있습니다. 실제 exam+age 조합이 unique하지 않으면 에러가 나고 index는 생성되지 않습니다.
- nomiss는 missing value 에는 index 생성에서 제외됩니다.
< SAS Output >
Datasets procedure 이용하여 Index 생성하기
< SAS Code >
proc datasets lib=test nolist;
modify test_data;
index create ExamAge=(exam age) /* Composite Index */
birth; /* Single Index */
quit;
proc datasets lib=test nolist;
modify test_data;
index create comp=(exam age) / nomiss unique;
quit;
- nomiss는 missing value 에는 index 생성에서 제외됩니다.
- unique는 exam+age 조합의 키가 ID처럼 unique한 index를 생성할때 사용합니다.
Proc sql 이용하여 Index 생성하기
< SAS Code >
/* Single Index */
proc sql;
create table test_index4 (index=(birth)) as
select * from test.test_data;
quit;
proc contents data=test_index4;run;
/* Composite Index */
proc sql;
create table test_index5 (index=(ExamAge=(Exam Age))) as
select * from test.test_data;
quit;
proc contents data=test_index5;run;
- (index=(ExamAge=(Exam Age) / unique / nomiss)) 도 동일하게 사용가능합니다.
Index 삭제하기
위의 예제에서 만든 test_index5 데이터셋의 ExamAge 라는 이름의 index와 test.test_data 내에 만든 동일한 ExamAge index를 삭제해 보겠습니다.
proc sql;
drop index ExamAge from test_index5;
quit;
proc datasets library=test;
modify test_data;
index delete ExamAge;
quit;
2022.07.11 - [의학통계/SAS Tip] - SAS의 Data step의 Set문장 이용하여 Match 여부 처리하는 방법
2022.07.12 - [의학통계/SAS Tip] - SAS의 Data step의 Modify문장 이용하여 Match 여부 처리하는 방법
'의학통계 > SAS Tip' 카테고리의 다른 글
SAS의 Data step의 Modify문장 이용하여 Match 여부 처리하는 방법 (0) | 2022.07.12 |
---|---|
SAS의 Data step의 Set문장 이용하여 Match 여부 처리하는 방법 (0) | 2022.07.11 |
SAS에서 Wide, Long 포맷 데이터 변환하기 (0) | 2022.07.04 |
성능향상을 위한 SAS코딩 Tip (0) | 2022.06.30 |
SAS에서 중복된 데이터 제거하기 (0) | 2022.06.23 |
댓글