본문 바로가기
의학통계/SAS Tip

SAS의 Data step의 Set문장 이용하여 Match 여부 처리하는 방법

by boogler 2022. 7. 11.
반응형

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 예제데이터

< 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'가 나오게 됩니다.

사망원인설명을 가져온 결과Table

 

2022.07.09 - [의학통계/SAS Tip] - SAS에서 Index 만드는 3가지 방법

2022.07.12 - [의학통계/SAS Tip] - SAS의 Data step의 Modify문장 이용하여 Match 여부 처리하는 방법

댓글