SAS의 Data step의 Set문장 이용하여 Match 여부 처리하는 방법
코드와 코드 설명을 가지고 있는 Lookup Table이 있고, 이 Table을 이용하여 Main Table에 코드값을 Key로 코드설명드을 가져오는 경우가 흔히 있습니다. Main Table을 읽으면서 Lookup Table 의 코드를 index로 만들어 Key 로 하여 Data step의 Set 문장을 이용하여 Match 여부를 처리하는 것을 예제를 통해 알아보겠습니다.
EX. 사망코드데이터(test.death)를 참고하여, 사망자의 사망원인 Description을 사망코드를 Key로 Main 데이터(death_report)에 가져오는 예제입니다.
▶ 목표 : test.death 테이터를 이용하여, deathdesc가 없는 Main Table에 사망원인설명을 추가하여 death_report 라는 새로운 Table을 만들어 보겠습니다.
< SAS Code >
1) test.death -> work 라이브러리에 death라는 이름의 Table로 저장하고, deathcode 를 single unique index 로 생성합니다.
proc datasets lib=work nolist;
copy in=test out=work;select death;
modify death;
index create deathcode/unique; /* 아래 Key option에 사용할 index */
quit;
proc contents data=death;run;
2) test.death_nodescription 을 읽으면서, work.death table을 set 문장 + Key 조합으로 읽으면서 death description을 가져오고 match되는 것이 없는 경우 'not found'로 처리합니다.
data death_report;
length d_code $8.;
set test.death_nodescrption;
deathcode=compress(d_code);
length deathDescription $60.;
set work.death key=deathcode / unique;
if _IORC_ = %sysrc(_DSENOM) then
do;
deathDescription='Not Found';
_ERROR_ = 0;
end;
else
deathDescription=deathdesc;
keep deathcode deathDescription;
run;
* _IORC_ : Data Step에서 각 I/O처리의 에러값을 저정함.
* _DSENOM : Match 되는 건이 없는 경우를 체크함.
* _ERROR_ : SAS가 error를 만나게 되면 _ERROR_=1이 되어 log창에 에러가 표시되기때문에 _ERROR_=0으로 코딩하면 log창에 error를 표시되지 않음. _ERROR_은 사용하지 않아도 결과는 동일합니다.
< SAS Output >
deathcode에 맞는 deathDescription을 Lookup table에서 가져오고 match 되는것이 없는 경우 'Not Found'가 나오게 됩니다.
2022.07.09 - [의학통계/SAS Tip] - SAS에서 Index 만드는 3가지 방법
2022.07.12 - [의학통계/SAS Tip] - SAS의 Data step의 Modify문장 이용하여 Match 여부 처리하는 방법
'의학통계 > SAS Tip' 카테고리의 다른 글
SAS에서 필요한 데이터만 가져오기 (0) | 2022.07.14 |
---|---|
SAS의 Data step의 Modify문장 이용하여 Match 여부 처리하는 방법 (0) | 2022.07.12 |
SAS에서 Index 만드는 3가지 방법 (0) | 2022.07.09 |
SAS에서 Wide, Long 포맷 데이터 변환하기 (0) | 2022.07.04 |
성능향상을 위한 SAS코딩 Tip (0) | 2022.06.30 |
댓글