Date: Mon, 1 May 2000 11:17:31 -0400
Reply-To: "Fehd, Ronald J." <rjf2@CDC.GOV>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Fehd, Ronald J." <rjf2@CDC.GOV>
Subject: %xtab2htm.sas
Content-Type: text/plain; charset="iso-8859-1"
/***********************
platform: PC-SAS
OS : WinNT
Version : Production V8 **/
options notes details mprint;
%MACRO HTMWRITE(/*- called by XTAB2HTM - - - - - - - - - - - - - - - */
DATA /* data set name */
,VAR1 /* proc FREQ cross-table first var */
,VAR2 /* proc FREQ cross-table second var */
,PATH /* destination of HTML files */
);/*this macro called by macro XTAB2HTM via call execute
assumption:
data set name is a subset
data set containing only VAR1 values equal to data set name
output: two HTML files
1. proc FREQ : cross-table
2. proc PRINT: detail list: see IDs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
%local WIDTH;%*disabled;
%LET WIDTH=40;%*disabled;
ods listing close;%*write to SAS.list: OFF;
ods html body="&PATH.\&DATA.xTab.htm";
proc FREQ data = &DATA.;
label &VAR2.="&DATA";
* format &VAR2. $char&WIDTH..;
tables &VAR2. /list missing nocum;
run;ods html close;
ods html body="&PATH.\&DATA.list.htm";
proc PRINT data = &DATA.
(drop= &VAR1.)
label;
label &VAR2.="&DATA";
* format &VAR2. $char&WIDTH..;
by &VAR2.;
id &VAR2.;
run;ods html close;ods listing;%*write to SAS.list: ON;
%*..............................................................; %MEND;
%*HTMWRITE(CODENONT,_NAME_,TEXT,r:\data\MPEPHIV1\P0001\HTM\TEXT\ANY);
;/* XTAB2HTM 00May01 * * * * * * * * * * * * * * * * * * * * * * * * * *
process:
1. FREQ of VAR1 to output data set: INDEX
2. add html anchors/links to INDEX
3. write INDEX.htm
4. make subsets for FREQ.xtab and PRINT.details
5. %HTMWRITE
author: Ronald Fehd the macro maven CDC Atlanta GA USA
e-mail: RJF2@cdc.gov
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
%MACRO XTAB2HTM(/*- - - - - - - - - - - - - - - - - - - - - - - - - - */
DATA /* data set name */
,VAR1 /* proc FREQ cross-table first var */
,VAR2 /* proc FREQ cross-table second var */
,PATH /* destination of HTML files */
);%*--------------------------------;
%local TESTING;
%LET TESTING = 0;
%LET TESTING = 1;%*enable testing msgs and prints;
%LET VAR1 = %upcase(&VAR1.);
%*1;
proc FREQ data = &DATA;
tables &VAR1.
/out = INDEX
%IF not &TESTING %THEN %DO;
noprint %END;
;
%*2 add anchors/links to FREQ:INDEX of &VAR1.;
data INDEX;
attrib Ndx&VAR1. length= $ 80 label="&VAR1. summary"
NdxCount length= $ 80 label="&VAR1. count"
;
set INDEX;
%*expected: <a href =VARNAMExtab.htm> VARNAME </a>;
Ndx&VAR1.= '<a href ="'
!! trim(&VAR1.)
!! 'xtab.htm">'
!! &VAR1.
!! '</a>'
;
NdxCount = '<a href ="'
!! trim(&VAR1.)
!! 'list.htm">'
!! put(Count,8.)
!! '</a>'
;
run;
%IF &TESTING %THEN %DO; proc PRINT data = INDEX;run; %END;
ods listing close;%*write to SAS.list: OFF;
ods html body="&PATH.\index.htm";
proc PRINT data = INDEX label
split = ' ';
format Percent 5.1;
var Ndx: Percent;
run; ods html close;ods listing;%*write to SAS.list: ON;
%*4 write: 1. data set list
2. subset output
3. HTM;
data _NULL_;
retain Testing
%IF &TESTING %THEN 1;
%ELSE 0;
;
file PRINT;
%*4.1 write data set list;
if Testing then put 'data ' ;
else call execute('data ');
do until(EndoFile);
set INDEX(keep = &VAR1.) end = EndoFile;
if Testing then put &VAR1. ;
else call execute(&VAR1.);
%*do until(EOF); end;
%*close DATA statement, write set statement;
if Testing then put ";set &DATA.;" ;
else call execute(";set &DATA.;");
EndoFile = 0;%*reset for next loop;
%*4.2 write output statements;
do until(EndoFile);
set INDEX(keep = &VAR1.) end = EndoFile;
if Testing then put "if &VAR1. = '"
&VAR1. +(-1) "' then output " &VAR1. ';' ;
else call execute("if &VAR1. = '"
!! &VAR1. !! "' then output " !! &VAR1. !! ';');
%*do until(EOF); end;
EndoFile = 0;%*reset for next loop;
if Testing then put 'RUN;' ;
else call execute("RUN;");%*execute subset write;
%*4.3 %HTMWRITE;
do until(EndoFile);
set INDEX(keep = &VAR1.) end = EndoFile;
if Testing then put '%'
"HTMWRITE(" &VAR1. ",&VAR1.,&VAR2.,&PATH.);" ;
else call execute('%'
!! "HTMWRITE(" !! trim(&VAR1.) !! ",&VAR1.,&VAR2.,&PATH.);" );
%*do until(EOF); end;
stop;
%*EXAMPLE:;
%*HTMWRITE(CODENONT,_NAME_,TEXT,r:\data\MPEPHIV1\P0001\HTM\TEXT\ANY);
run;ods listing;%*OPEN;%*.......................................; %MEND;
%XTAB2HTM(REPORT,_NAME_,TEXT,&PATH_HTM.\TEXT\&STUDY.);
/*TEST DATA ************************** ENABLE: SLASH AT END OF LINE: **
DATA TEST;
infile CARDS;
input @ 1 ID $char4.
@ 6 _Name_ $char8.
@15 Text $char20.;
;cards;
0811 CODENONT TEST PERFORMED DAILY
2541 CODENONT TEST NOT PERFORMED I
4591 CODENONT TEST NOT PERFORMED I
9951 CODENONT TEST ONLY PERFORMED
5761 CODENONT TEST RGTS NOT AVAILA
9871 PRCNAMET 25 CHIRON RIBA HIV1/
9521 PRCNAMET A RAPID IMMUNOASSAY
7251 PRCNAMET ABBOT AXSYM HIV-1/HI
9941 PRCNAMET ABBOTT AXSYM
3631 PRCNAMET ABBOTT AXSYM
6661 PRCNAMET ABBOTT AXSYM
2771 PRCNAMET ABBOTT AXSYM
6111 PRCNAMET ABBOTT AXSYM (06)
1422 PRCNAMET ABBOTT AXSYM HIV-1/H
2061 PRCNAMET ABBOTT AXSYM HIV-1/H
3961 PRCNAMET ABBOTT AXSYM HIV-1/H
1321 PRCNAMET ABBOTT AXSYM HIV1/HI
;
%XTAB2HTM(TEST,_NAME_,TEXT,C:\TEMP);
*EXPECTED OUTPUT FILES WRITTEN TO c:\temp:
INDEX.HTM
CODENONTxtab.htm
CODENONTlist.htm
PRCNAMETxtab.htm
PRCNAMETlist.htm;
/***********************************/