\documentclass{article} \usepackage{statrep} \usepackage{parskip,xspace} \newcommand*{\Statrep}{\mbox{\textsf{StatRep}}\xspace} \newcommand*{\Code}[1]{\texttt{\textbf{#1}}} \newcommand*{\cs}[1]{\texttt{\textbf{\textbackslash#1}}} \setcounter{secnumdepth}{0} \title{Example and Tutorial for the \Statrep Package} \author{Tim Arnold and Warren F. Kuhfeld\\SAS Institute Inc., Cary, NC} \date{April 25, 2012} \begin{document} \maketitle \section{Introduction} This article provides an example and a tutorial that show how to use the \Statrep \LaTeX\ package. For complete details see the \emph{\Statrep User's Guide} that accompanies the package (\Code{statrepmanual.pdf}). The package is available for download at \texttt{http://support.sas.com/StatRepPackage}. When you use the \Statrep \LaTeX\ package, you use the following four-step process to create an executable document that enables you to ensure that your research results are reproducible: \begin{enumerate} \item Create your \LaTeX\ document so that it contains your text, data, and SAS code. \item Compile your document with pdf\LaTeX\ to generate the SAS program. \item Execute the SAS program to capture your output. For each code block in your document, SAS creates a SAS Output Delivery System (ODS) document that contains the resulting output. For each output request in your document, SAS replays the specified output objects to external files. All your requested output is generated and captured when you execute the generated SAS program. \item Recompile your \LaTeX\ document. In this step, the requested outputs are embedded in the resulting final PDF document. You might need to repeat this step so that \LaTeX\ can measure the listing outputs to ensure that they are framed appropriately. \end{enumerate} \section{Step 1: Create Your \LaTeX\ Document} This article provides you with an example \LaTeX\ document already created as in step 1. The purpose of the \Code{Datastep} environment is to read in data. It produces no output. The SAS statements in the \Code{Datastep} environment create a new data set called \Code{Wine}. The \Code{first=} and \Code{last=} options specify that only a portion of the data set be displayed. ...descriptive text that introduces data... \begin{Datastep}[first=5, last=3] data Wine; input WineType $ VisitLength @@; datalines; white 80 white 98 white 115 white 89 white 103 white 91 white 119 white 31 white 109 white 95 white 71 white 105 white 66 white 141 white 79 white 113 white 69 white 120 white 87 red 93 red 87 red 106 red 76 red 121 red 143 red 81 red 97 red 74 red 107 red 112 red 67 red 107 red 72 red 116 red 99 red 104 red 91 red 132 red 78 red 107 red 101 red 92 ; \end{Datastep} The purpose of the \Code{Sascode} environment is to generate output. The statements in the following \Code{Sascode} environment perform an analysis that uses the ANOVA procedure (PROC ANOVA). You use the \Code{store=} option so that later in your document you can refer to output that is created in the \Code{Sascode} environment. In this example, all output that is generated by the analysis is stored in the ODS document \Code{wineA}. ...descriptive text that introduces the analysis... \begin{Sascode}[store=wineA] ods graphics on; proc anova data=Wine; class WineType; model VisitLength = WineType; run; ods graphics off; \end{Sascode} The \cs{Listing} and \cs{Graphic} tags specify the output to be displayed. The purpose of the \cs{Listing} tag is to display tabular output and notes. The purpose of the \cs{Graphic} tag is to display graphical output. ...descriptive text that introduces output... The \cs{Listing} tag selects three output tables from the \Code{wineA} ODS document: \Code{ClassLevels}, \Code{NObs}, and \Code{OverallANOVA} \Listing[store=wineA, objects=ClassLevels NObs OverallANOVA, caption={Analysis of Variance for Visit Length}]{tsta} The \cs{Graphic} tag selects the \Code{BoxPlot} graph from the \Code{wineA} ODS document. ...descriptive text that introduces the graph... \Graphic[store=wineA, objects=BoxPlot, caption={Box Plots for Visit Length}]{tstb} \section{Step 2: Compile Your Document} You can compile your document as follows from the command line: \begin{verbatim} pdflatex quickstart.tex \end{verbatim} If you use a \LaTeX-aware editor, such as \TeX works, you can use it to compile your document. In either case, when you compile your document, the \Statrep system produces a PDF file and generates a SAS program. \textbf{Note:} The requested output is missing after the first compile step. (This is normal at this step.) \section{Step 3: Execute the SAS Program} Open the generated SAS program \Code{quickstart\_SR.sas} in a SAS session. From the SAS main menu, select \textsf{Run}$\rightarrow$\textsf{Submit}. In this step, SAS generates the results that are requested in your document. By default, tabular output files are created in the `lst' subdirectory and graphic output files are created in the `png' subdirectory. \section{Step 4: Recompile Your \LaTeX\ Document} The last step is to recompile your document with pdf\LaTeX. As in the first compilation, you can use a \LaTeX-aware editor such as \TeX works, or you can use the \Code{pdflatex} command in a terminal window. In this recompilation step, the outputs that are captured by the SAS program are included in the final PDF document. \section{Conclusion} When you generate the SAS program by compiling your document with pdf\LaTeX, the \Statrep package does the following: \begin{itemize} \item The lines in the \Code{Datastep} environment are passed unchanged to the program. \item The lines in the \Code{Sascode} environment are parsed for line commands and passed to the program. \item Each \cs{Listing} tag selects the specified notes and tables. \item Each \cs{Graphic} tag selects the specified graphs. \end{itemize} When you execute the generated SAS program, the output that is specified in the \cs{Listing} and \cs{Graphic} tags is automatically captured. When you recompile your \LaTeX\ document, the \cs{Listing} and \cs{Graphic} tags insert the requested SAS results and page breaks are handled automatically. \end{document}