* 출처 : 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;
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.