LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (May 2000, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
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; /***********************************/


Back to: Top of message | Previous page | Main SAS-L page