/*-------------------------------------------------------------------*/
/* Quick Results with the Output Delivery System */
/* by Sunil Gupta */
/* Copyright(c) 2003 by SAS Institute Inc., Cary, NC, USA */
/* SAS Publications order # 58458 */
/* ISBN 1-59047-163-6 */
/*-------------------------------------------------------------------*/
/* */
/* This material is provided "as is" by SAS Institute Inc. There */
/* are no warranties, expressed or implied, as to merchantability or */
/* fitness for a particular purpose regarding the materials or code */
/* contained herein. The Institute is not responsible for errors */
/* in this material as it now exists or will exist, nor does the */
/* Institute provide technical support for it. */
/* */
/*-------------------------------------------------------------------*/
/* Questions or problem reports concerning this material may be */
/* addressed to the author: */
/* */
/* SAS Institute Inc. */
/* Books by Users */
/* Attn: Sunil Gupta */
/* SAS Campus Drive */
/* Cary, NC 27513 */
/* */
/* */
/* If you prefer, you can send email to: sasbbu@sas.com */
/* Use this for subject field: */
/* Comments for Sunil Gupta */
/* */
/*-------------------------------------------------------------------*/
/* Date Last Updated: February 18, 2003 */
/*-------------------------------------------------------------------*/
/* -------------- Appendix - DEMOG sample Data set --------------- */
libname mylib 'c:\odsrslts';
data mylib.demog;
input patient $3. gender 3. height 4.1 weight 4. age 5.1
race 3. drug $7.;
format height age 4.1;
label patient='Patient' gender='Sex' height='Height'
weight='Weight' age='Age' race='Race' drug='Drug';
datalines;
001 1 74.4 257 67.9 1 Active
002 1 63.1 168 36.7 0 Active
003 1 69.6 264 74.6 0 Placebo
004 1 63.2 270 73.8 1 Placebo
005 1 67.8 209 57.8 1 Active
006 0 56.7 116 47.5 1 Active
007 1 70.4 150 47.8 1 Active
008 1 68.5 172 82.6 1 Active
009 0 66.4 212 25.1 0 Active
010 1 68.1 216 60.6 1 Placebo
011 1 62.8 193 80.0 1 Active
012 1 73.6 198 77.4 1 Active
013 0 59.8 117 72.3 1 Active
014 0 74.7 179 37.4 0 Placebo
015 1 73.0 195 21.4 1 Active
016 1 57.7 213 27.3 1 Active
017 1 59.9 199 43.1 1 Active
018 1 70.2 219 67.3 0 Active
019 1 68.6 236 62.2 1 Placebo
020 1 70.7 255 66.4 1 Active
021 1 71.6 228 27.3 1 Active
022 1 58.9 111 68.3 1 Active
023 1 65.7 194 67.1 0 Active
024 1 63.2 234 65.2 0 Active
025 1 72.4 162 56.1 0 Placebo
;
run;
/* --------- Chapter 2 - Writing to Report Generation Destinations --------- */
/* ---------- Example 2.1: How to create HTML files ------------------------------*/
ODS LISTING CLOSE;
ODS HTML FILE = 'C:\ODSRSLTS\BODY.HTML';
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
ODS LISTING;
/* Example 2.2: How to create body, contents, and frame files for better navigation */
ODS HTML
PATH = 'C:\ODSRSLTS\' (URL=NONE)
BODY = 'BODY.HTML'
CONTENTS = 'CONTENTS.HTML'
FRAME = 'FRAME.HTML'
NEWFILE = NONE;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
/* Example 2.3: How to create graphs in HTML files */
DATA DEMOG;
SET DEMOG;
LENGTH HTMLVARIABLE $ 40;
HTMLVARIABLE = 'HREF=' || TRIM(DRUG) || '.HTML';
RUN;
ODS LISTING CLOSE;
ODS HTML
PATH ='C:\ODSRSLTS\' (URL=NONE)
BODY ='GRAPH_BODY.HTML'
;
GOPTIONS DEVICE=GIF HSIZE=5IN VSIZE=2.5IN;
PATTERN1 V=EMPTY C=RED;
PATTERN2 V=X3 C=RED;
TITLE 'SUMMARY LEVEL: AVERAGE WEIGHT BY DRUG';
PROC GCHART DATA=DEMOG;
VBAR DRUG / SUMVAR=WEIGHT TYPE=MEAN
SUBGROUP=DRUG
HTML=HTMLVARIABLE;
WHERE DRUG IN ('Active' 'Placebo');
RUN;
QUIT;
ODS HTML CLOSE;
ODS HTML
PATH ='C:\ODSRSLTS\' (URL=NONE)
BODY ='ACTIVE.HTML' ;
TITLE 'DETAIL LEVEL: LISTING OF ACTIVE PATIENTS';
FOOTNOTE 'BACK';
PROC PRINT DATA=DEMOG;
VAR PATIENT DRUG WEIGHT GENDER RACE AGE HEIGHT;
WHERE DRUG='Active';
RUN;
ODS HTML CLOSE;
ODS HTML
PATH ='C:\ODSRSLTS\' (URL=NONE)
BODY ='PLACEBO.HTML' ;
TITLE 'DETAIL LEVEL: LISTING OF PLACEBO PATIENTS';
FOOTNOTE 'BACK';
PROC PRINT DATA=DEMOG;
VAR PATIENT DRUG WEIGHT GENDER RACE AGE HEIGHT;
WHERE DRUG='Placebo';
RUN;
TITLE;
FOOTNOTE;
ODS HTML CLOSE;
/* Example 2.4: How to create an RTF File */
OPTIONS ORIENTATION = LANDSCAPE NOCENTER NODATE;
ODS RTF FILE='C:\ODSRSLTS\DRUG.RTF';
TITLE 'Drug Freqs' ;
FOOTNOTE1 'Active = Drug A, Placebo = Drug B';
FOOTNOTE2 'BioTech Inc., confidential 2001';
PROC FREQ DATA=DEMOG;
TABLES DRUG;
RUN;
ODS RTF CLOSE;
/* Example 2.5: How to format text in RTF Files */
OPTIONS ORIENTATION = LANDSCAPE NOCENTER NODATE NONUMBER;
ODS ESCAPECHAR = "^";
ODS RTF FILE='C:\ODSRSLTS\DRUG_FORMATTED.RTF' STARTPAGE=YES;
TITLE j=l "Drug Freqs^{super a}"
j=r "{Page} {\field{\*\fldinst{ PAGE }}}
\~{of}\~{\field{\*\fldinst { NUMPAGES }}}" ;
FOOTNOTE1 '^{super a}Active = Drug A, Placebo = Drug B';
FOOTNOTE2 '^{sub BioTech Inc., confidential 2001}';
PROC FREQ DATA=DEMOG;
TABLES DRUG;
RUN;
ODS RTF CLOSE;
/* Example 2.6: How to create PDF files */
OPTIONS ORIENTATION = LANDSCAPE NOCENTER;
ODS PDF FILE='C:\ODSRSLTS\DRUG.PDF';
TITLE 'Drug Freqs';
FOOTNOTE1 'Active = Drug A, Placebo = Drug B';
FOOTNOTE2 'BioTech Inc., confidential 2001';
PROC FREQ DATA=DEMOG;
TABLES DRUG;
RUN;
ODS PDF CLOSE;
/* Example 2.7: How to create printer, PS, PDF and PCL files simultaneously */
OPTIONS ORIENTATION = LANDSCAPE NOCENTER;
ODS ESCAPECHAR = "^";
ODS PRINTER (ID=1);
ODS PS FILE='C:\ODSRSLTS\DRUG.PS';
ODS PDF FILE='C:\ODSRSLTS\DRUG.PDF';
ODS PRINTER (ID=2) PRINTER='PCL5'
FILE='C:\ODSRSLTS\DRUG.PCL' SAS;
TITLE 'Drug Freqs^{super a}';
FOOTNOTE1 '^{super a}Active = Drug A, Placebo = Drug B';
FOOTNOTE2 '^{sub BioTech Inc., confidential 2001}';
PROC FREQ DATA=DEMOG;
TABLES DRUG;
RUN;
ODS PRINTER (ID=2) CLOSE;
ODS PDF CLOSE;
ODS PS CLOSE;
ODS PRINTER (ID=1) CLOSE;
/* Example 2.5: How to save output from several SAS procedures to HTML files */
ODS HTML
PATH = 'C:\ODSRSLTS\' (URL=NONE)
BODY = 'BODY2.HTML'
CONTENTS = 'CONTENTS2.HTML'
FRAME = 'FRAME2.HTML' ;
PROC FREQ DATA=DEMOG;
TABLES DRUG;
RUN;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
/* Example 2.6: How to create an HTML file and an RTF file simultaneously */
ODS HTML FILE = 'C:\ODSRSLTS\DEMOG.HTML' ;
ODS RTF FILE= 'C:\ODSRSLTS\DEMOG.RTF' ;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS RTF CLOSE;
ODS HTML CLOSE;
/* --------- Chapter 3 - Manipulating ODS Objects ------------------------------- */
/* Example 3.1: How to use the ODS TRACE statement */
ODS TRACE ON / LABEL LISTING;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS TRACE OFF;
/* Example 3.2: How to select objects by object name for the HTML destination */
OPTIONS NOCENTER;
ODS LISTING FILE='C:\ODSRSLTS\DEMOG.LST';
ODS HTML FILE = 'C:\ODSRSLTS\SELECT_DEMOG.HTML' ;
ODS HTML
SELECT BASICMEASURES;
ODS HTML SHOW;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
ODS LISTING CLOSE;
/* Example 3.3: How to select objects by object name for all destinations */
OPTIONS NOCENTER;
ODS LISTING FILE='C:\ODSRSLTS\SELECT_DEMOG.LST';
ODS HTML FILE = 'C:\ODSRSLTS\SELECT_DEMOG.HTML' ;
ODS
SELECT BASICMEASURES;
ODS SHOW;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
ODS LISTING CLOSE;
/* Example 3.4: How to exclude objects */
ODS HTML FILE = 'C:\ODSRSLTS\EXCLUDE_DEMOG.HTML' ;
ODS HTML EXCLUDE BASICMEASURES;
ODS HTML SHOW;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
/* Example 3.5: How to use the PERSIST option to maintain a selection list */
ODS HTML FILE = 'C:\ODSRSLTS\SELECT_PERSIST_DEMOG.HTML' ;
ODS HTML SELECT BASICMEASURES(PERSIST) EXTREMEOBS;
ODS HTML SHOW;
TITLE 'RUN 1 - BasicMeasures and Extremeobs objects are selected';
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML SHOW;
TITLE 'RUN 2 - BasicMeasures object is still selected';
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
/* --------- Chapter 4 - Writing to the Object Destination ----------------------- */
/* Example 4.1: How to create SAS data sets with ODS */
ODS OUTPUT BASICMEASURES = MYLIB.MEASURE;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS OUTPUT CLOSE;
/* Example 4.2: How to create multiple SAS data sets with ODS */
ODS OUTPUT BASICMEASURES(MATCH_ALL = MEASURE_DSN) = MYLIB.MEASURE;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT HEIGHT;
RUN;
ODS OUTPUT CLOSE;
%PUT The MEASURE_DSN macro variable contains the following data sets &MEASURE_DSN..;
/* --------- Chapter 5 - Working with ODS Destinations and Objects ------- */
/* Example 5.1: Working with objects and several different destinations */
ODS HTML FILE = 'C:\ODSRSLTS\BASIC_DEMOG.HTML' ;
ODS HTML SELECT BASICMEASURES;
ODS RTF FILE= 'C:\ODSRSLTS\EXTREME_DEMOG.RTF' ;
ODS RTF SELECT EXTREMEOBS;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS RTF CLOSE;
ODS HTML CLOSE;
/* Example 5.2: Working with several objects from the BY Statement */
PROC SORT DATA=DEMOG;
BY DRUG;
RUN;
ODS HTML FILE='C:\ODSRSLTS\SELECT_WEIGHT_GROUP1_DEMOG.HTML';
ODS HTML SELECT UNIVARIATE.BYGROUP1.WEIGHT.BASICMEASURES;
PROC UNIVARIATE DATA=DEMOG;
BY DRUG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;
/* Example 5.3: Working with several objects from several analysis variables */
ODS HTML FILE='C:\ODSRSLTS\SELECT_UNIVARIATE_DEMOG.HTML';
ODS HTML SELECT UNIVARIATE.WEIGHT.BASICMEASURES
UNIVARIATE.HEIGHT.EXTREMEOBS;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT HEIGHT;
RUN;
ODS HTML CLOSE;
/* --------- Chapter 6 - Enhancing Reports with ODS Styles -------------------- */
/* Example 6.1: Using ODS styles with destinations */
ODS HTML FILE='C:\ODSRSLTS\DEMOG_STYLE.HTML' STYLE=SASDOCPRINTER;
PROC UNIVARIATE DATA=DEMOG;
VAR WEIGHT;
RUN;
ODS HTML CLOSE;