BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [HTML] HTML 상의 데이터를 처리하여서 SAS 데이터로 읽기(COMPRESS 와 정규식 함수)

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

* 출처 : http://cafe.daum.net/statsas/3F8j/213

* 전희원님의 블로그에서 R로 웹페이 데이터를 읽는 글을 보고, SAS로 구현하였습니다.


* 몇년전에 손해보험 협회의 보험료 자료를 월별 배치로 작성하려고 SAS로 구현하였었는데, 오랫만에 HTML 로딩 소스를 보니 생소하네요.^^ FIRSTOBS와 OBS는 일단 수작업으로 작성하였습니다. 이 번거로움을 제거하기 위해서는 검색하셔서 HTML 읽어서 처리하는 SAS 매크로를 검색하여 보시기를 바랍니다. ;


* 웹(인터넷)상의 페이지 지정하기;

filename foo url
   'http://www.kiise.or.kr/evt/prml2013/pay/list_registers.asp?SHOW_FLD=&SHOW_VLU=&personIdSet=&personNu...';

* 방법1 : COMPRESS 함수로 TAG처리하기;
DATA BACK;
   infile foo firstobs=139 OBS=6258;
   input / /
         #3 @'<td>'  VAR1 :$5.
         /
         #5          PER_MAN :$10.
         /
         #7 @'<td>'  VAR2 :$25.
         #8 @'<td>'  VAR3 :$25.
         #9 @'<td>'  VAR4 :$16.
         /
         #11 @'<td>' INP_DAT :$10.
         #12 @'<td>' VAR5 :$20.
         / / / / /;
         * COMPRESS 함수를 사용하여서 TGA제거;
         SEQ_NUM = COMPRESS(VAR1,'</td>');
         SCH_NAM = COMPRESS(VAR2,'</td>');
         DEP_NAM = COMPRESS(VAR3,'</td>');
         RES_NAM = COMPRESS(VAR4,'</td>');
         FIN_YNO = COMPRESS(VAR5,'</td>');
         DROP VAR:;
RUN;

* 방법2 : 정규식 함수로 TAG 처리하기;
DATA BACK1;
   infile foo firstobs=139 OBS=6258 MISSOVER;
   input / /
         #3  SEQ_NUM :$15.
         /
         #5  PER_MAN :$10.
         /
         #7  SCH_NAM :$35.
         #8  DEP_NAM :$35.
         #9  RES_NAM :$35.
         /
         #11 INP_DAT :$35.
         #12 FIN_YNO :$35.
         / / / / /;
         ARRAY HTML SEQ_NUM--FIN_YNO;
         * 정규식 정의;
         RX1=PRXPARSE("s/<.*?>//");

         * 정규식을 사용하여서 TAG 제거;
         DO I=1 TO DIM(HTML);
            call prxchange(rx1,10,HTML[I]);
         END;
         DROP I RX1;
RUN;


* 그래프 그리기;
ODS GRAPHICS / RESET IMAGENAME = 'Final' IMAGEFMT =JPEG
HEIGHT = 25in WIDTH = 50in;
ODS LISTING GPATH = 'c:\' ;

PROC SGPLOT DATA=BACK11;
     VBAR SCH_NAM/STAT=FREQ;
RUN;

ODS LISTING SGE = OFF;
 

Version history
Last update:
‎06-11-2020 10:01 PM
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