BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [tranwrd] 불필요 변수 처리 방안 ( 단어 삭제 )

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 235

* 질 문 : http://cafe.daum.net/statsas/B3m/12773

* 최홍규님 답변 : http://cafe.daum.net/statsas/B3m/12774

* 저의 답변 :  http://cafe.daum.net/statsas/B3m/12776

 

********************************************************;

* 최홍규 님 답변;

********************************************************;

/*
array에 넣어서 do loop로 돌리면 되겠네요.
질문에서 이미 말씀하셨던 바 그대로.. ^^;
*/

 

DATA one;
INPUT cmpnm $60.;
CARDS;
(합자)칠칠공사
신광산업(합자)
동해화물(합명)
(의)동화의료재단
은성관광(합)
(합자)한도요업
(의)성경의료재단
(자)세종
(합자)정인케이아이씨
(명)푸른도시
(자)진양개발
한경건설(자)
(의)무학의료재단
(합자)조치원마트
;
RUN;
 

* 제거할 문자열을 데이터셋으로 ;

data two;
input aux $ @@;
cards;
(합자) (합명) (합) (의) (명) (자)
;
RUN;

 

* array에 잡기 위해서 갯수를 매크로변수로..;

proc sql noprint;
select count(*) into :c from two;
quit;

 

* 먼저 array를 채우고 나서 치환대상이 되는 데이터를 읽어서 tranwrd로 변환;

data three;

 

if _n_=1 then do;
 array x(&c) $;
 retain x;
 do i=1 to &c;
  set two;
  x(i)=aux;
 end;
end;

 

set one;


do i=1 to &c;
 cmpnm=compress(tranwrd(cmpnm,trim(x(i)),""));
end;

 

keep cmpnm;
run;

 

 

********************************************************;

* 저의 답변;

********************************************************;

 

* 함수로 처리해 보았습니다. ( )안의 글자를 제거 로직인데,

  만약 ( ) 안에 문장중에서 삭제하면 안된는 단어가 있다면 추가 로직이 필요합니다.;

 

DATA one;
INPUT cmpnm $60.;
CARDS;
(합자)칠칠공사
신광산업(합자)
동해화물(합명)
(의)동화의료재단
은성관광(합)
(합자)한도요업
(의)성경의료재단
(자)세종
(합자)정인케이아이씨
(명)푸른도시
(자)진양개발
한경건설(자)
(의)무학의료재단
(합자)조치원마트
;
RUN;

 

data back;
 set one;
     var1 = kindex(cmpnm,'(');
     var2 = kindex(cmpnm,')');
     var3 = ksubstr(cmpnm,var1,var2);
     var4 = compress(tranwrd(cmpnm,trim(var3)," "));

run;
 

Version history
Last update:
‎06-11-2020 03:55 AM
Updated by:
Contributors

sas-innovate-white.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.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

Article Labels
Article Tags