summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/statrep/doc
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/statrep/doc
Initial commit
Diffstat (limited to 'macros/latex/contrib/statrep/doc')
-rw-r--r--macros/latex/contrib/statrep/doc/images/Thumbs.dbbin0 -> 48127 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/default.pngbin0 -> 20727 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/example_output.pngbin0 -> 33784 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/htmlblue.pngbin0 -> 27614 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/journal.pngbin0 -> 20905 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/listing.pngbin0 -> 19317 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/sasuniv1.pngbin0 -> 158101 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/statistical.pngbin0 -> 21958 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/vm1.pngbin0 -> 85523 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/vm2.pngbin0 -> 90837 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/images/vm3.pngbin0 -> 72565 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/quickstart.tex176
-rw-r--r--macros/latex/contrib/statrep/doc/statrep.pdfbin0 -> 418742 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/statrepmanual.pdfbin0 -> 625258 bytes
-rw-r--r--macros/latex/contrib/statrep/doc/statrepmanual.tex2978
15 files changed, 3154 insertions, 0 deletions
diff --git a/macros/latex/contrib/statrep/doc/images/Thumbs.db b/macros/latex/contrib/statrep/doc/images/Thumbs.db
new file mode 100644
index 0000000000..feb1fb04eb
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/Thumbs.db
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/default.png b/macros/latex/contrib/statrep/doc/images/default.png
new file mode 100644
index 0000000000..8bfff57cc5
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/default.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/example_output.png b/macros/latex/contrib/statrep/doc/images/example_output.png
new file mode 100644
index 0000000000..010af4c137
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/example_output.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/htmlblue.png b/macros/latex/contrib/statrep/doc/images/htmlblue.png
new file mode 100644
index 0000000000..a67acf037a
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/htmlblue.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/journal.png b/macros/latex/contrib/statrep/doc/images/journal.png
new file mode 100644
index 0000000000..b012f55cac
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/journal.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/listing.png b/macros/latex/contrib/statrep/doc/images/listing.png
new file mode 100644
index 0000000000..d81f91cefc
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/listing.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/sasuniv1.png b/macros/latex/contrib/statrep/doc/images/sasuniv1.png
new file mode 100644
index 0000000000..00389bd602
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/sasuniv1.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/statistical.png b/macros/latex/contrib/statrep/doc/images/statistical.png
new file mode 100644
index 0000000000..f6f5c7a06c
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/statistical.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/vm1.png b/macros/latex/contrib/statrep/doc/images/vm1.png
new file mode 100644
index 0000000000..e126ac6c6b
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/vm1.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/vm2.png b/macros/latex/contrib/statrep/doc/images/vm2.png
new file mode 100644
index 0000000000..274ebcb3a7
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/vm2.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/images/vm3.png b/macros/latex/contrib/statrep/doc/images/vm3.png
new file mode 100644
index 0000000000..1f57fbe067
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/images/vm3.png
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/quickstart.tex b/macros/latex/contrib/statrep/doc/quickstart.tex
new file mode 100644
index 0000000000..4cf527ff1c
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/quickstart.tex
@@ -0,0 +1,176 @@
+\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}
diff --git a/macros/latex/contrib/statrep/doc/statrep.pdf b/macros/latex/contrib/statrep/doc/statrep.pdf
new file mode 100644
index 0000000000..bf87bbf8ab
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/statrep.pdf
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/statrepmanual.pdf b/macros/latex/contrib/statrep/doc/statrepmanual.pdf
new file mode 100644
index 0000000000..8960bc852e
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/statrepmanual.pdf
Binary files differ
diff --git a/macros/latex/contrib/statrep/doc/statrepmanual.tex b/macros/latex/contrib/statrep/doc/statrepmanual.tex
new file mode 100644
index 0000000000..723fbb6a5d
--- /dev/null
+++ b/macros/latex/contrib/statrep/doc/statrepmanual.tex
@@ -0,0 +1,2978 @@
+\documentclass[article,oneside]{memoir}
+\usepackage[T1]{fontenc}
+\usepackage{mathptmx,upquote,alltt}
+\IfFileExists{helvet.sty}{\usepackage[scaled=0.92]{helvet}}{\relax}
+\IfFileExists{couriers.sty}{\usepackage[scaled=0.95]{couriers}}{\relax}
+\usepackage{float,graphicx,xspace,framed,xcolor}
+\definecolor{shadecolor}{rgb}{0.97,0.97,0.97}
+\definecolor{lightblue}{rgb}{0.93,0.95,1.0}
+\definecolor{darkblue}{rgb}{0,0,0.6}
+\definecolor{darkred}{rgb}{0.6,0,0}
+\setlength{\parindent}{0pt}
+\nonzeroparskip
+\usepackage[
+ bookmarks=true,
+ hyperindex = true,
+ pdfpagemode = useoutlines,
+ pdfpagelabels = true,
+ plainpages = false,
+ colorlinks = true,
+ linkcolor=darkblue,
+ filecolor=darkblue,
+ citecolor=darkblue,
+ urlcolor=darkblue,
+]{hyperref}
+\usepackage{attachfile}
+\usepackage{memhfixc}
+\raggedbottom
+\hyphenation{StatRep}
+\chapterstyle{article}
+\DeclareTextFontCommand{\Code}{\ttfamily}
+\newcommand*{\StatRep}{\textsf{StatRep}\xspace}
+\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}
+\setlength{\FrameSep}{1pt}
+\title{The \StatRep System for Reproducible Research}
+\author{Tim Arnold and Warren F. Kuhfeld\\SAS Institute Inc.}
+\makeindex
+\begin{document}
+\maketitle
+\tableofcontents*%\listoftables\listoffigures
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\part{User's Guide}
+\chapter{Synopsis}
+The \StatRep system consists of a \LaTeX\ package and a suite of SAS macros that
+support SAS users who want to create documents with reproducible results.
+
+The \LaTeX\ package provides two environments and
+two tags that work together to display your SAS code and results and to
+generate the SAS program that produces those results. The two environments
+(\Code{Datastep} and \Code{Sascode}) display SAS code.
+The two tags (\cs{Listing} and \cs{Graphic}) display SAS output.
+
+The generated SAS program includes calls to the \StatRep macros that use the SAS
+Output Delivery System (ODS) document to capture the output as external files.
+These SAS macros are included in the package file \Code{statrep\_macros.sas}.
+
+The \StatRep package is available at \url{http://support.sas.com/StatRepPackage}
+
+By default, \StatRep displays SAS output tables as generated by the ODS Listing
+destination; that is, the output tables are displayed as plain text. However, you can
+specify that \StatRep display \LaTeX\ outputs, generated by SAS, instead
+(see appendix \ref{latexoutput} for details).
+
+You can use \StatRep with a standalone SAS installation on your PC, or you can use it
+in conjunction with \textbf{SAS Studio} and \textbf{SAS University Edition}
+(see appendix \ref{sasstudio} for details).
+
+Bundled with the \StatRep package is the \Code{longfigure} package for
+multipage figures.
+You can use the \Code{lonfigure} package in other \LaTeX\ documents.
+
+The \StatRep system was designed to be flexible enough to support serious publishing systems.
+It can handle many different situations and it is very customizable.
+This document
+covers all aspects of \StatRep; however, for most users, the \textit{User's Guide} portion
+will suffice. For those who need more advanced techniques and customization, please see the
+\textit{Reference Manual}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Introduction}
+
+At the end of a research project, one of the most difficult tasks remains: documentation.
+The task is especially difficult with computational research because you
+must ensure that the displayed program code works as expected and exactly produces the
+displayed output.
+
+The \StatRep package, a single-source document system,
+is an open-source software project that you can use for your own research documentation
+to ensure that the results you display can easily be reproduced by your readers.
+The \StatRep package is based on the \LaTeX\ typesetting system. You write your paper using
+both the usual \LaTeX\ markup and the customizations and SAS macros that this package provides.
+The system reads the code and markup from the single source (your document) and creates a
+SAS program. This automatically generated SAS program produces the results that are displayed
+in your document.
+
+Comparable projects such as Sweave (Leisch 2002) and SASweave (Lenth 2007)
+address the problem of reproducibility through the use of a special intermediate language.
+Although similar in spirit to those systems, \StatRep differs in that it is a
+normal \LaTeX\ package; no special steps are needed to create the \LaTeX\
+file or the SAS program. In addition, \StatRep provides both a complete, customizable system for
+automatic handling of multiple outputs and page breaking and an easy-to-use,
+flexible method for output selection.
+
+When you use the \StatRep \LaTeX\ package, you follow a four-step process to
+create an executable document that enables you to create
+reproducible research results:
+\begin{enumerate}
+\item Create your \LaTeX\ source file so that it contains your text, data, and SAS code.
+
+\item Compile the document with pdf\LaTeX. You can use a LaTeX-aware
+ editor such as \TeX works, or you can use the command-line command \Code{pdflatex}.
+ This step generates the SAS program that is needed to produce the results.
+ If the name of your document is \textit{myarticle.tex}, the name of the generated SAS
+ program is \textit{myarticle\_SR.sas} by default.
+
+\item Execute the SAS program to capture your output.
+
+During execution of the SAS program, for each code block in your document,
+SAS creates a SAS Output Delivery System (ODS) document that contains the resulting output.
+For more information about ODS documents, see the
+\textit{SAS Output Delivery System User's Guide}.
+For each output request (the included \cs{Listing} and \cs{Graphic} tags) in your document, SAS replays the specified output objects
+to external files. All of your requested output is generated and captured when you
+execute the generated SAS program.
+
+\item Recompile the document with pdfLaTeX. This step compiles your
+ document to PDF, this time including the SAS results
+ that are generated in the preceding step.
+
+ In some cases listing outputs may not be framed properly after this step.
+ If your listing outputs are not framed properly, repeat this step so that
+ LaTeX can remeasure the listing outputs.
+
+\end{enumerate}
+
+When you need to make a change in your data or SAS code, you make the change in
+one place (the \LaTeX\ source file) and repeat steps 2 through 4.
+Your changes are automatically displayed in your code and in your results.
+You perform the steps only as needed---when you change your data or code.
+
+You can share your \LaTeX\ source with colleagues and be sure that your results
+are reproducible. Any SAS user can reproduce your analysis with your \LaTeX\ document
+and the supplemental files that are described in this manual.
+
+\section{Requirements for the \StatRep Package}
+\index{package!requirements}
+To use the \StatRep package, you need SAS 9.2 or later,
+the \LaTeX\ typesetting system
+(the pdf\LaTeX\ typesetting engine must be version 1.30 or later), and the \StatRep package itself.
+
+For complete step-by-step instructions for installation, see appendix \ref{install}.
+
+\section{Package Usage}
+\index{package!usage}
+ To use the \StatRep package, include it in your document preamble after you
+ declare the \Code{documentclass}.
+ Figure \ref{fig:usage} displays an example of how you can use the \StatRep package.
+
+\begin{figure}[H]
+\begin{shaded}
+\begin{verbatim}
+\documentclass{book}
+\usepackage[figname=output,resetby=chapter]{statrep}
+\end{verbatim}%
+\end{shaded}
+\caption{Example of Using the \StatRep Package}\label{fig:usage}
+\end{figure}
+
+ The \StatRep package supports the following options:\index{package!options}
+ \begin{itemize}
+ \item \Code{color} specifies color support for SAS output tables.
+ This option is only used in conjunction with
+ the ODS LaTeX tagset (see appendix \ref{latexoutput}).
+
+ \item \Code{generate} specifies whether a SAS program
+ is generated at compile time. \index{generate option}
+ It can have a value of \Code{true} or \Code{false}; the default is \Code{true}.
+
+ \item \Code{figname=} specifies the name of a \LaTeX\ counter
+ that is used for numbering outputs\index{figname option}.
+ The default is \Code{figure}. If you specify a value for the \Code{figname}
+ option for which no counter exists,
+ a counter is created.\index{figure names}\index{figname option}
+
+ \item \Code{resetby=} specifies that the counter for output numbering be reset with
+ each change in the specified counter value. For example, if \Code{resetby=chapter},
+ all output numbering is reset when the chapter value changes.\index{resetby= option}
+ \end{itemize}
+
+ The options \Code{figname=} and \Code{resetby=} are not used directly by the \StatRep
+ package but are passed to the \Code{longfigure} package, which
+ is provided with the \StatRep package.
+ The \Code{longfigure} package
+ supports display and page breaking within a stream of outputs, and it can be
+ used independently of the \StatRep package. See chapter{longfigure} for
+more information.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Getting Started}\label{gs}
+
+This section provides a simple example of how you can use the \StatRep package
+to produce a document with reproducible results.
+You can follow along with the actual code: extract this
+\textattachfile[color=0 0 0.6]{example.tex}{example \LaTeX\ file} that
+contains the code in this section if your PDF viewer supports file annotations.
+
+ Two code environments
+ (\Code{Datastep}, shown in Figure \ref{fig:d1}, and
+ \Code{Sascode}, shown in Figure \ref{fig:s1})
+ and two output tags
+ (\cs{Listing} and \cs{Graphic}, shown in Figure \ref{fig:slg})
+ are used to generate a SAS program that produces
+ the necessary output files.
+
+ The code from the \Code{Datastep} environment is passed unchanged to the
+ generated SAS program.\index{Datastep environment}
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Datastep}
+proc format;
+ value $sex 'F' = 'Female' 'M' = 'Male';
+data one;
+ set sashelp.class;
+ format sex $sex.;
+run;
+\end{Datastep}
+\end{verbatim}
+\end{snugshade}
+\caption{Example of \texttt{Datastep} Environment}\label{fig:d1}
+\end{figure}
+
+ The code in the \Code{Sascode} environment is parsed by the \StatRep package before it is
+ written to the generated SAS program.\index{Sascode environment}
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=class]
+proc reg;
+ model weight = height age;
+run;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Example of \texttt{Sascode} Environment}\label{fig:s1}
+\end{figure}
+
+ The \cs{Listing} and \cs{Graphic} tags convey information to \LaTeX\ and to SAS.
+ The tags specify the names of the output files to insert into the document
+ and the captions for the output.
+ Additionally, the tags specify the names of the output files to
+ create and they can specify which
+ ODS objects to capture. In this example, no objects are specified so all
+ objects are captured.
+ \index{Listing tag}\index{Graphic tag}%
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\Listing[store=class,
+ caption={Regression Analysis}]{rega}
+
+\Graphic[store=class, scale=0.9,
+ caption={Graphs for Regression Analysis}]{regb}
+\end{verbatim}
+\end{snugshade}
+\caption{Example of \texttt{Listing} and \texttt{Graphic} Tags}\label{fig:slg}
+\end{figure}
+
+ Figure \ref{fig:sgp} shows the SAS code that is generated
+ from the preceding \LaTeX\ source when you compile the document.
+
+\begin{figure}[H]
+\begin{framed}
+\begin{snugshade}
+{\hfil\emph{generated from }\textbf{Datastep Block}\hfil}
+\begin{verbatim}
+proc format;
+ value $sex 'F' = 'Female' 'M' = 'Male';
+data one;
+ set sashelp.class;
+ format sex $sex.;
+run;
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+{\hfil\emph{generated from }\textbf{Sascode Block}\hfil}
+\begin{verbatim}
+%output(class)
+proc reg;
+ model weight = height age;
+run;
+%endoutput(class)
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+{\hfil\emph{generated from }\textbf{Listing \& Graphic Tags}\hfil}
+\begin{verbatim}
+%write(rega,store=class,type=listing)
+
+%write(regb,store=class,type=graphic)
+\end{verbatim}
+\end{snugshade}
+\end{framed}
+\caption{Generated SAS Code}\label{fig:sgp}
+\end{figure}
+
+ When you generate the SAS program by compiling your \LaTeX\ document,
+ the lines in the \Code{Datastep} environment are passed unchanged to the program
+ and
+ the lines in the \Code{Sascode}
+ environment are wrapped between two SAS macros (\Code{\%output} and \Code{\%endoutput}),
+ whose definitions accompany this package (\texttt{statrep\_macros.sas}).
+ \index{statrep\_macros.sas}\index{SAS macros!output}\index{SAS macros!endoutput}
+ The macros and their options are discussed in detail in section \ref{macros}.
+
+ The \cs{Listing} tag results in a call to the \Code{\%write} macro that selects all notes and tables from the ODS document.\index{SAS macros!write}
+ The \cs{Graphic} tag results in a call to the \Code{\%write} macro that selects all graphs from the ODS document.
+
+ When you execute the generated SAS program that is displayed
+ in Figure \ref{fig:sgp}, the SAS results created in the \Code{Sascode} block are contained
+ in the ODS document \Code{class}. The \Code{\%write} macro writes the requested results from the ODS document
+ to the specified
+ external files.
+
+ When you compile your \LaTeX\ document again, the \cs{Listing} and \cs{Graphic} tags
+ insert the requested SAS results, handling page breaks automatically.
+
+ The first listing in the example document is shown in Figure \ref{exfig}.
+\definecolor{shadecolor}{rgb}{0.93,0.95,1.0}
+
+\begin{figure}[H]
+\caption{Example listing output}\label{exfig}
+\begin{snugshade}
+\centering
+\includegraphics[width=0.8\textwidth]{images/example_output}
+\end{snugshade}
+\end{figure}
+
+\definecolor{shadecolor}{rgb}{0.97,0.97,0.97}
+
+By default, \StatRep generates listing output from the
+SAS ODS Listing destination. The preceding figure provides an example
+of how the SAS output is displayed in your LaTeX document.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Syntax}
+
+ The \StatRep package provides two environments and two tags that work
+ together to display your SAS code and results and generate the SAS program
+ that produces those results.
+
+ The environments:
+ \begin{itemize}
+ \item The \Code{Datastep} environment contains SAS code blocks that produce no output.
+ Its purpose is to read in data.
+ \item The \Code{Sascode} environment contains SAS code that generates output to be
+ captured. It supports line-based commands to identify
+ code lines that should only be displayed, only passed to the generated program,
+ or both displayed and passed to the generated program.
+ \end{itemize}
+
+ The tags:
+ \begin{itemize}
+ \item The \cs{Listing} tag provides information to the generated program about
+ which tabular SAS output should be captured.
+ It also provides information to \LaTeX\ about how that output should be displayed.
+ \item The \cs{Graphic} tag provides information to the generated program about
+ which graphical SAS output should be captured.
+ It also provides information to \LaTeX\ about how that output should be displayed.
+ \end{itemize}
+
+ The environments and tags are described in detail in the following sections.
+
+\section{Code Environments}
+
+\subsection{Datastep Environment}\index{Datastep environment}
+
+The purpose of the \Code{Datastep} environment is to read in data.
+It produces no SAS results.
+
+ The \Code{Datastep} contents are passed unchanged to the generated program.
+ The \Code{Datastep} block is indented by three spaces in the PDF file.
+ You can adjust the amount that the block is indented; see
+ section \ref{custom} for details. The block indent is provided automatically so that
+ your data and program lines can begin in the first column in your \LaTeX\ source.
+
+ Because you begin the \Code{Datastep} data lines in the
+ first column, formatted or column input statements will work correctly when
+ pasted into a SAS session.\index{copy and paste}\index{interactive SAS session}
+
+
+ Although the purpose of the \Code{Datastep} environment is to read in data,
+ \index{reading data}%
+ it can contain any SAS code that does not generate output
+ to be captured. Additional statements typically include
+ TITLE and OPTIONS statements and PROC FORMAT steps. See Figure \ref{fig:sd2}
+ on page \pageref{fig:sd2} for an example.
+
+
+Table \ref{dsopt} summarizes the \Code{Datastep} environment options.
+\index{Datastep environment!options}
+\index{program option}\index{display option}\index{first= option}\index{last= option}%
+\index{fontsize= option}
+
+\begin{table}[H]
+\caption{Commonly Used \Code{Datastep} Environment Options}\label{dsopt}
+\begin{tabular}{lP{3.75in}}
+\hline
+\textbf{Option} & \textbf{Action} \\
+\hline
+ & By default, all lines are displayed and written to the program.
+\\[0.5\baselineskip]
+\Code{program} &
+ Specifies that all lines in the environment
+ be written to the generated program only
+ (that is, no lines are displayed). This option is useful when you need
+ to produce a data set that is not central to the topic being
+ discussed and does not need to be displayed.
+\\[0.5\baselineskip]
+\Code{display} &
+ Specifies that all lines in the environment be displayed
+ only (that is, no lines are written to the program). This option is
+ useful when you need to show code fragments that will not run as is or
+ example code that is not needed
+ for later output generation. A \Code{Datastep} environment that specifies
+ the \Code{display} option is similar to a plain \Code{verbatim} environment except
+ that it is automatically indented when displayed.
+\\[0.5\baselineskip]
+\Code{first=\textit{n}} &
+ Specifies that the first \textit{n} lines
+ in the environment be displayed. The option affects only the displayed
+ code block.
+ This option is useful when you have many data lines that do not need to be
+ displayed, but that must be available to the program.
+ After the \textit{n}th line is displayed, the following
+ text line is written in the displayed code block:
+ \par\texttt{... more data lines ...}\par%
+ You can specify different text to be used;
+ see section \ref{custom} for details.
+\\[0.5\baselineskip]
+\Code{last=\textit{m}} &
+ Specifies that the last \textit{m} lines
+ in the environment be displayed. The option affects only the displayed
+ code block.
+ This option is used in conjunction with the \Code{first=} option to show
+ the ending lines of the \Code{Datastep} environment. Without the \Code{first=}
+ option, the \Code{last=} option has no effect.
+\\[0.5\baselineskip]
+\Code{fontsize=} & Specifies the \LaTeX\ font size used to display the
+ code block. For exampe, \Code{fontsize=small} or \Code{fontsize=footnotesize}.
+\\
+\hline
+
+\end{tabular}
+\end{table}
+
+See the section \titleref{dsex} for an example.
+
+ \subsection{Sascode Environment}\index{Sascode environment}
+
+The purpose of the \Code{Sascode} environment is to generate output.
+In addition to the environment options, it supports
+line commands that enable you to specify certain lines as display-only or program-only.
+
+ The \Code{Sascode} environment is parsed for line commands, and the appropriate lines are
+ passed to the program and displayed. The displayed code block is indented by three spaces.
+ You can adjust the amount the block should be indented; see section \ref{custom} for
+ details.\index{display option} The block indent is provided
+ automatically so that your program lines can begin in the first column in your \LaTeX\ source.
+
+ Because all line commands are valid SAS statements,
+ you can copy \Code{Sascode} blocks and paste them directly
+ into a SAS session.\index{copy and paste}\index{interactive SAS session}
+
+Table \ref{scopt} summarizes the \Code{Sascode} environment options.
+\index{Sascode environment!options}\index{store= option}\index{program option}%
+\index{display option}\index{fontsize= option}%
+
+\begin{table}[H]
+\caption{Commonly Used \Code{Sascode} Environment Options}\label{scopt}
+\begin{tabular}{lP{3.75in}}
+\hline
+\textbf{Option} & \textbf{Action} \\
+\hline
+& By default, all lines are displayed and written to the program. \\[0.5\baselineskip]
+\Code{store=} &
+ Specifies the name of the ODS document to contain the SAS output.
+\\[0.5\baselineskip]
+
+\Code{program} & Specifies that all lines in the environment
+ be written to the program only
+ (that is, no lines are displayed). This option is useful when you need
+ to execute code that is not central to the topic being discussed and need not
+ be displayed.
+\\[0.5\baselineskip]
+\Code{display} &
+ Specifies that all lines in the environment
+ be displayed only (that is, no lines are written to the program).
+ This option is
+ useful when you need to show example code
+ fragments that will not run as is or that are not needed
+ for later output generation. A \Code{Sascode} environment that specifies
+ the \Code{display} option is similar to a plain \Code{verbatim} environment except
+ that it is automatically indented when displayed.
+\\[0.5\baselineskip]
+\Code{fontsize=} &
+ specifies the \LaTeX\ font size used to display the
+ code block (for example, \Code{fontsize=small} or \Code{fontsize=footnotesize}).
+\\
+\hline
+\end{tabular}
+\end{table}
+
+The \Code{Sascode} environment also supports
+a finer degree of control with line-based commands to identify lines that should
+be only displayed or only passed to the generated program.
+
+Table \ref{lcmd} summarizes the line commands you can use in the \Code{Sascode} environment.
+\index{Sascode environment!line commands}
+\index{program line command}\index{display line command}
+
+\begin{table}[H]
+\caption{\Code{Sascode} Line Commands}\label{lcmd}
+\begin{tabular}{lP{3.5in}}
+\hline
+\textbf{Option} & \textbf{Action} \\
+\hline
+ \Code{\%* program} \textit{n} \Code{;} & The next \textit{n} lines are only written to
+ the program and not displayed.\\[0.5\baselineskip]
+ \Code{\%* display} \textit{n} \Code{;} & The next \textit{n} lines are only displayed
+ and not written to the program.\\[0.5\baselineskip]
+ \Code{\%*;} \textit{code line} & The current line is only written to the
+ program and not displayed.\\
+\hline
+\end{tabular}
+\end{table}
+
+ The \Code{Sascode} environment is parsed for line commands before being written
+ to the generated program file.
+
+See the sections \titleref{scex} and \titleref{scexlc} for examples.
+
+
+ By using a combination of environment options and line commands, you have
+ complete control over the displayed code and the generated program contents.
+
+\section{Outputs}
+ \index{SAS ODS outputs}\index{Listing tag}\index{Graphic tag}
+The \cs{Listing} and \cs{Graphic} tags specify the outputs 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.
+
+ All figures are centered. If the figure width is narrower than the text block, the
+ figure is centered with respect to the text block. Otherwise, the figure is
+ centered with respect to the page.
+
+ The \cs{Listing} and \cs{Graphic} tags support a set of options and have one
+ mandatory argument, which specifies the filename prefix for the output
+ to be generated and displayed.
+ The prefix must be unique; otherwise the output from one example will
+ overwrite another.
+
+ Furthermore, the prefix must not end in a numeral so that the prefix name does not interfere
+ with SAS-generated output file names.
+ When SAS generates a set of files from one ODS selection, it follows a
+ pattern: the first file that is generated is identical to the filename, the next
+ file that is generated has the same name with a ``1'' appended to it, the next file
+ has the same name with a ``2'' appended, and so on.
+
+ The options supported by the \cs{Listing} and \cs{Graphic} tags are used by
+ the \StatRep \LaTeX\ package and by the \StatRep SAS macros.
+
+ The following table lists all options. Subsequent tables provide descriptions
+ for each option and how it is used in LaTeX and in SAS.
+\begin{table}[H]
+\caption{Master List of Output Tag Options}
+ \begin{tabular}{lll}
+ \toprule
+ \textbf{Option Name} & \textbf{Used by} & \textbf{Output Tag}\\
+ \midrule
+\Code{caption=} & LaTeX & Listing, Graphic \\
+\Code{dest=} & LaTeX, SAS & Listing \\
+\Code{dpi=} & SAS & Graphic \\
+\Code{firstobj=} & SAS & Listing, Graphic \\
+\Code{fontsize=} & LaTeX & Listing (ODS Listing destination) \\
+\Code{height=} & SAS & Graphic \\
+\Code{lastobj=} & SAS & Listing, Graphic \\
+\Code{linesize=} & LaTeX, SAS & Listing (ODS Listing destination) \\
+\Code{objects=} & SAS & Listing, Graphic \\
+\Code{options=} & SAS & Listing, Graphic \\
+\Code{pagesize=} & SAS & Listing \\
+\Code{pattern=} & SAS & Listing, Graphic \\
+\Code{scale=} & LaTeX & Graphic \\
+\Code{store=} & LaTeX, SAS & Listing, Graphic \\
+\Code{style=} & SAS & Listing (ODS LaTeX destination), Graphic \\
+\Code{type=} & SAS & Listing, Graphic \\
+\Code{width=} & LaTeX, SAS & Graphic \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+ \subsection{Options Used by the \textsf{StatRep} \LaTeX\ Package}
+ \index{Listing tag!options}\index{Graphic tag!options}
+ The following options are used by the \StatRep \LaTeX\ package.
+ \index{caption= option}\index{fontsize= option}\index{linesize= option}%
+ \index{scale= option}\index{store= option}\index{width= option}
+
+ \begin{description}
+ \item[\Code{caption=}] specifies the caption to use for an output.
+
+ \item[\Code{dest=}] specifies the ODS destination to use for generating the output.
+ The default value is \Code{listing}. The other possible value is \Code{latex}, which
+ specifies that Listing output be generated and displayed as LaTeX tables.
+
+ \item[\Code{fontsize=}] specifies the \LaTeX\ font size to use to display an output
+ (for example, \Code{fontsize=small} or \Code{fontsize=footnotesize}).
+
+ \item[\Code{linesize=}] specifies the line size used to generate and display
+ \Code{Listing} output. By default, the value is 80 columns.
+ This specification lasts for the duration of this step. The current line size is
+ restored at the end.
+ Typical values are \Code{80}, \Code{96}, or \Code{120}.
+
+ For extremely wide output tables, you can use the \Code{linesize} and \Code{fontsize}
+ options together (for example, \Code{linesize=120} and \Code{fontsize=scriptsize}).
+ The \Code{linesize} option affects how SAS captures the table. The \Code{fontsize}
+ option specifies how \LaTeX\ displays the table.\index{linesize= option}%
+ \index{fontsize= option}\index{wide output}
+
+ \item[\Code{scale=}] specifies a factor by which to scale a \Code{Graphic} image.
+ For example, specify \Code{scale=0.5} to scale the image to half its original size,
+ or specify \Code{scale=2} to scale it to double its original size.
+
+ \item[\Code{store=}] specifies the name of the ODS document that is created in a
+ \Code{Sascode} environment. When you specify the \Code{store=} option,
+ the \StatRep package adds the appropriate SAS macro calls to the
+ generated program.
+
+ \item[width=] specifies the width to generate and display \Code{Graphic} output
+ The default is 6.4 inches, which is the standard width for ODS graphs.
+
+ \end{description}
+
+ \subsection{Options Passed to the \textsf{StatRep} SAS Macros}\label{sasopts}
+ \index{SAS macro options}
+The \Code{store=}, \Code{linesize=}, and \Code{width=} options described in the previous
+section are passed to the \StatRep SAS macros.
+\index{dpi= option}\index{firstobj= option}\index{height= option}\index{lastobj= option}
+\index{linesize= option}\index{objects= option}\index{options= option}
+In addition, the following options are passed to the \StatRep SAS macros:
+ \begin{description}
+
+ \item[\Code{dest=}] specifies the ODS destination to use for generating the output.
+ The default value is \Code{listing}. The other possible value is \Code{latex}, which
+ specifies that Listing output be generated and displayed as LaTeX tables.
+
+ \item[\Code{dpi=}] specifies dots per inch (DPI) to use in generating graphs.
+ The default is \Code{dpi=300}. A typical alternative is \Code{dpi=100}.
+
+ \item[\Code{firstobj=}] specifies the first data object to capture in an output stream.
+ All objects after and including the specified object
+ are displayed, up to the final object
+ (or optionally up to the object specified in \Code{lastobj=}).
+ You can use \Code{options=skipfirst} to begin with the object after the one specified in \Code{firstobj=}.
+ See section \ref{selection} for details.
+
+ \item[\Code{height=}] specifies the height of graphs. The default is 0.75 times the width.
+
+ \item[\Code{lastobj=}] specifies the last data object to capture in an output stream.
+ All objects starting with the first object
+ (or optionally the object specified in \Code{firstobj=}) are displayed up to and
+ including the specified object.
+ You can use \Code{options=skiplast} to end with the object before the one specified in \Code{lastobj=}.
+
+\item[\Code{linesize=}] specifies the line size used to generate and display
+ \Code{Listing} output. By default, the value is 80 columns.
+ This specification lasts for the duration of this step. The current line size is
+ restored at the end.
+ Typical values are \Code{80}, \Code{96}, or \Code{120}.
+
+ \item[\Code{objects=}] specifies a space-separated list of ODS objects to capture
+ in an output stream.
+ The names that are used for selection come from the ODS document.
+ If you specify \Code{objects=}, then you can also specify object breaking rules
+ (where page breaks can occur). See section \ref{selection} for details.
+
+ \item[\Code{options=}] specifies binary options. Specify one value or a space-separated
+ list of values (for example, \Code{options=skipfirst skiplast}).
+ You can specify the following values (the default is \Code{options=autopage}):
+
+ \begin{description}
+ \item[\Code{autopage}] specifies that the first \cs{Listing}
+ command or \Code{\%write} macro start a new output stream with
+ titles, procedure titles, and so on.
+ Page breaks also occur at other places where the procedure
+ explicitly sets a page break. The \Code{autopage} value is the default.
+ See also the \Code{nopage} and \Code{newpage} values.
+ \index{autopage option}
+
+ \item[\Code{graph}] specifies that only graphs be selected.
+ You can alternatively specify \Code{type=graph}.\index{graph option}
+
+ \item[\Code{list}] specifies that the contents of the ODS document be listed
+ in the SAS log. This value does not run PROC DOCUMENT to replay the output.\index{list option}
+
+ \item[\Code{newpage}] specifies that SAS force a new page for the first object.
+ \index{newpage option}
+
+ \item[\Code{nopage}] suppresses page breaks.\index{nopage option}
+
+ \item[\Code{onebox}] groups all tables, notes, reports, and so on into a
+ single piece of SAS output. You cannot specify this option to group graphs.
+ See section \ref{selection} for more information about grouping.\index{onebox option}
+
+ \item[\Code{skipfirst}] modifies the \Code{firstobj=} option so that the first object in the
+ list is not selected. This enables you to select all objects after the one
+ specified in \Code{firstobj=}.\index{skipfirst option}
+
+ \item[\Code{skiplast}] modifies the \Code{lastobj=} option so that the last object
+ in the list is not selected. This enables you to select all objects before
+ the one specified in \Code{lastobj=}.\label{skiplast}\index{skiplast option}
+
+ \item[\Code{table}] selects all objects
+ (tables, notes, reports, and so on) except graphs. You can
+ alternatively specify \Code{type=listing}.\index{table option}
+
+ \end{description}
+
+ \item[\Code{pagesize=}] specifies the page size. The default is the page size currently in effect.
+ This specification lasts for the
+ duration of this step. The current page size is restored at the end.\index{pagesize= option}
+
+ If you have not changed the page size, the default page size set by the \StatRep
+ package is 500. This large page size is the default so that output is generated with
+ minimal new pages caused by page boundaries. For large tables, you can specify a smaller
+ page size to force more page breaks. See section \ref{custom} for information about
+ how to change the \StatRep default. See section \ref{large} for information about how
+ to use the \Code{pagesize=} option with large tables.
+
+ \item[\Code{pattern=}] provides an optional and additional selection criterion.
+ Specify part of a path (for example, a group name).\index{pattern= option}
+ Only objects whose name includes the specified value are selected.
+
+ \item[\Code{store=}] specifies the name of the ODS document that is created in a
+ \Code{Sascode} environment. When you specify the \Code{store=} option,
+ the \StatRep package adds the appropriate SAS macro calls to the
+ generated program.\index{store= option}
+
+ \item[\Code{style=}] specifies the ODS style to use in generating output.
+ The default is \mbox{\Code{style=Statistical}}. You can change the default style
+ (for example, to \Code{HTMLBlue}) by inserting the following line into a \Code{Sascode}
+ or \Code{Datastep} environment:\index{style= option}
+
+\begin{snugshade}
+\begin{verbatim}
+ *; %let defaultstyle=HTMLBlue;
+\end{verbatim}
+\end{snugshade}
+
+ This option affects ODS graphs only when used in a \cs{Graphic} tag.
+ You can specify this option in the \Code{\%output} macro to set the style
+ for GRSEG graphs (graphs that are produced by legacy SAS/GRAPH
+ procedures such as the GPLOT, GMAP, and GCHART procedures).
+ GRSEG graphs are stored in catalogs
+ and cannot be changed after they are generated. In contrast,
+ style, DPI, and so on for ODS graphis can be changed after the graph is initially created.
+ See section \ref{grseg} for more information.
+
+ \item[\Code{type=\emph{listing}|\emph{graph}}] specifies that only listings or
+ only graphs be selected.
+ You can alternatively specify \Code{options=table} or \Code{options=graph}.
+ \item[\Code{width=}] specifies the width to generate and display \Code{Graphic} output
+ The default is 6.4 inches, which is the standard width for ODS graphs.
+
+ \end{description}
+
+\chapter{Examples}
+\section{Using the Datastep Environment}\label{dsex}
+\index{Datastep environment}
+ Figure \ref{fig:sd2} displays an example \Code{Datastep} environment. The left margin for
+ the environment is in the first column, which is where the data lines themselves begin.
+ This ensures that the variables will be read correctly.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Datastep}[first=9, last=3]
+title 'Probit Analysis, Newspaper Survey';
+proc format;
+ value subscrib 1 = 'accept' 0 = 'reject';
+run;
+data news;
+ input sex $ 1-6 age 12-13 subs 18 ;
+ datalines;
+Female 35 0
+Male 45 1
+Female 51 0
+Male 54 1
+Female 35 0
+Female 48 0
+Male 46 1
+Female 46 1
+Male 38 1
+Male 49 1
+Male 50 1
+Female 47 0
+Female 39 0
+Female 45 0
+Male 39 1
+Female 39 0
+Female 52 1
+Male 58 1
+Female 32 0
+Female 35 0
+;
+\end{Datastep}
+\end{verbatim}
+\end{snugshade}
+\caption{\texttt{Datastep} Environment with Options}\label{fig:sd2}
+\end{figure}
+
+ In Figure \ref{fig:sd2}, the options to the \Code{Datastep} environment specify that only a portion
+ of the code block be displayed. All lines in the environment are written to the
+ generated program.
+
+ The option \Code{first=9} specifies that the displayed code
+ block contain the TITLE, the PROC FORMAT code, and the DATA step block through the
+ second line of data (the first nine input lines). After these lines, the
+ following text is displayed:\par\texttt{... more data lines ...}
+
+ The option \Code{last=3} specifies that the displayed code block
+ will contain the last three lines of the environment.
+
+ Figure \ref{fig:sd3} shows the display resulting from the preceding
+\Code{Datastep} environment.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ title 'Probit Analysis, Newspaper Survey';
+ proc format;
+ value subscrib 1 = 'accept' 0 = 'reject';
+ run;
+ data news;
+ input sex $ 1-6 age 12-13 subs 18 ;
+ datalines;
+ Female 35 0
+ Male 45 1
+
+ ... more data lines ...
+
+ Female 32 0
+ Female 35 0
+ ;
+\end{verbatim}
+\end{snugshade}
+\caption{Displayed \texttt{Datastep} Environment with Options}\label{fig:sd3}
+\end{figure}
+
+
+\section{Using the Sascode Environment}\label{scex}\index{Sascode environment}
+Figure \ref{sb} displays an example \Code{Sascode} environment.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=mdoc]
+proc reg data=h38 plots=predictions(X=Year);
+ model Population = Year Yearsq;
+quit;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Sascode Block}\label{sb}
+\end{figure}
+ The code displayed in Figure \ref{sb} contains SAS code that
+performs a regression analysis. Because no line commands are given,
+the code block is written as-is to the generated SAS program, as shown
+in Figure \ref{figsb}.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+%output(mdoc);
+proc reg data=h38 plots=predictions(X=Year);
+ model Population = Year Yearsq;
+quit;
+%endoutput(mdoc);
+\end{verbatim}
+\end{snugshade}
+\caption{Generated Code from Sascode Block }\label{figsb}
+\end{figure}
+
+\section{Using the Sascode Environment with Line Commands}\label{scexlc}
+\index{Sascode environment!line commands}
+Figure \ref{sblc} displays an example
+ \Code{Sascode} environment that contains line commands.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=mdoc]
+ * program 2;
+libname mylib 'c:/mylibs';
+filename in1 'h38.ssp';
+ * display 2;
+libname mylib 'path to your library directory';
+filename in1 'path to data directory/h38.ssp';
+proc reg data=mylib.h38 plots=predictions(X=Year);
+ model Population = Year Yearsq;
+quit;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Sascode Block with Line Commands}\label{sblc}
+\end{figure}
+ The code displayed in Figure \ref{sblc} contains
+ two line commands that delineate two
+ specifications for the \Code{libname} and \Code{filename} SAS statements.
+ The line command \Code{\mbox{\%* program 2;}} specifies that the location-specific
+ definitions be passed to the generated program,
+ as shown in Figure \ref{fig:gsblc}.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ output(mdoc);
+libname mylib 'c:/mylibs';
+filename in1 'h38.ssp';
+proc reg data=mylib.h38 plots=predictions(X=Year);
+ model Population = Year Yearsq;
+quit;
+ endoutput(mdoc);
+\end{verbatim}
+\end{snugshade}
+\caption{Generated Code from Sascode Block with Line Commands}\label{fig:gsblc}
+\end{figure}
+
+ The line command \Code{\%* display 2;} in Figure \ref{sblc}
+ specifies that the generic version
+ of the \Code{libname} and \Code{filename} statements be displayed,
+ as shown in Figure \ref{dsblc}.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ libname mylib 'path to your library directory';
+ filename in1 'path to data directory/h38.ssp';
+ proc reg data=mylib.h38 plots=predictions(X=Year);
+ model Population = Year Yearsq;
+ quit;
+\end{verbatim}
+\end{snugshade}
+\caption{Displayed Code from Sascode Block with Line Commands}\label{dsblc}
+\end{figure}
+
+\section{Selecting ODS Objects by Default}\label{odsdefault}
+\index{ODS object selection}
+
+ When you use the \cs{Graphic} tag, all graph objects are automatically selected.
+ When you use the \cs{Listing} tag, all non-graph objects such as tables and notes
+ are automatically selected. When you use the \Code{\%write} macro, you can specify
+ the \Code{options=graph} option to select graphs or the \Code{options=table} to
+ select tables and notes.
+
+ The following statements select all of the tables for the \cs{Listing}
+ display and all of the graphs for the \cs{Graphic} display:
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=docgs1]
+ods graphics on;
+proc corresp data=PhD short;
+ var y1973-y1978;
+ id Science;
+run;
+\end{Sascode}
+
+\Listing[store=docgs1,
+ caption={Inertia and Chi-Square Decomposition}]{crsi1a}
+
+\Graphic[store=docgs1,
+ caption={Correspondence Analysis of Ph.D. Data}]{crsi1b}
+\end{verbatim}
+\end{snugshade}
+\caption{Object Selection with the \cs{Listing} and \cs{Graphic} Tags}\label{optionoption}
+\end{figure}
+
+ The log information tables display the selected objects for each
+ block of output.
+
+ The first information table corresponds to the ODS selection that is produced
+ by the \cs{Listing} tag. All ODS objects of type `Table' are
+ selected (more precisely, all objects that are not of type `Graph').
+ Each object is contained in its own selection group, so
+ a page break might occur between any of the tables.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ Objects Type Status Group
+
+ Corresp.Inertias Table Selected 1
+ Corresp.Rows.RowCoors Table Selected 2
+ Corresp.Columns.ColCoors Table Selected 3
+ Corresp.Configuration.ConfigPlot Graph .
+\end{verbatim}
+\end{snugshade}
+\caption{SAS Log Information Table from the Listing Tag}\label{loglstinfo}
+\end{figure}
+
+ The second information table corresponds to the ODS selection that is produced
+ by the \cs{Graphic} tag. The single ODS object of type `Graph' is
+ selected.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ Objects Type Status Group
+
+ Corresp.Inertias Table .
+ Corresp.Rows.RowCoors Table .
+ Corresp.Columns.ColCoors Table .
+ Corresp.Configuration.ConfigPlot Graph Selected 1
+\end{verbatim}
+\end{snugshade}
+\caption{SAS Log Information Table from the Graphic Tag}\label{loggraphinfo}
+\end{figure}
+
+
+\section{Specifying and Capturing ODS Objects by Name}
+\index{ODS object selection}
+ To capture particular ODS objects or ODS group output, you
+ must specify the appropriate names in the \cs{Listing} tag,
+ the \cs{Graphic} tag, or the \Code{\%write} macro.
+ The options that support specific ODS names are
+ the \Code{pattern=},
+ \Code{firstobj=}, \Code{lastobj=}, or \Code{objects=} options.
+
+ If an object appears more than once in a particular ODS document
+ (which typically means in one \Code{Sascode} block), you must specify additional
+ name levels to differentiate the objects. The log information table
+ displays the fully qualified ODS names; you use the information from
+ the log to specify the appropriate name for the ODS objects to capture.
+
+ For example, if there are multiple residual panels,
+ you must specify the additional level to select a particular
+ ODS object.
+
+\begin{snugshade}
+\begin{verbatim}
+ objects=residualplot
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+\begin{verbatim}
+ objects=residualplot\#2
+\end{verbatim}
+\end{snugshade}
+
+ \textbf{Note:} When you have a pound character (\#) in a pattern or object name,
+ you must escape it in \LaTeX\ tags. The pound character is a special \LaTeX\ control
+ character and must be escaped with a backslash.
+ In other words, specify \Code{Group\textbackslash{}\#2} instead of
+ \Code{Group\#2} in a \LaTeX\ tag.
+ Do not escape the \# when you use the \Code{\%write} macro.
+
+ Comparisons are not case sensitive. For example, if you specify \Code{pattern=fit},
+ the following objects will be selected if they occur in the output stream:
+\begin{snugshade}
+\begin{verbatim}
+Fit.Population.ANOVA
+MODEL1.Fit.Population.ANOVA
+Reg.MODEL1.Fit.Population.ANOVA
+reg#1.model1#1.fit#1.population#1.anova#1
+reg#1.model1.fit.population#1.anova#1
+reg.model1.fit.population.anova
+\end{verbatim}
+\end{snugshade}
+
+ Typically\footnote{When deciding on names to specify, be sure to consult the table of names
+ from the ODS document that appears in the SAS log. It contains the proper pattern
+ of \# characters. See Figure \ref{loginfo} for an example.},
+ you need only to specify the last level of an ODS name.
+ For example, for one model and one ANOVA table,
+ all of the following specifications for the ANOVA object are equivalent.
+
+\begin{snugshade}
+\begin{verbatim}
+ anova
+ ANOVA
+ ANOVA\#1
+ Fit.Population.ANOVA
+ MODEL1.Fit.Population.ANOVA
+ Population.ANOVA
+ Reg.MODEL1.Fit.Population.ANOVA
+ reg.model1.fit.population.anova
+ reg\#1.model1.fit.population\#1.anova\#1
+ reg\#1.model1\#1.fit\#1.population\#1.anova\#1
+\end{verbatim}
+\end{snugshade}
+
+ When you run the SAS program that is generated by the \StatRep package,
+ the SAS log contains a table with information about each ODS object.
+ For example, Figure \ref{capturelist} shows a \Code{Sascode} environment that
+ is parsed and written to the generated SAS program when the \LaTeX\ document
+ is compiled.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=Ex31]
+proc probit data=news;
+ class subs sex;
+ model subs=sex age / d=logistic itprint;
+run;
+\end{Sascode}
+
+\Listing[store=Ex31,
+ objects=ClassLevels IterHistory ModelInfo
+ LastGrad LastHess ParameterEstimates,
+ caption={Logistic Regression of Subscription Status}]{prb31a}
+
+\end{verbatim}
+\end{snugshade}
+\caption{Example of Capturing Listing Output}\label{capturelist}
+\end{figure}
+
+The \cs{Listing} tag results in a call to the \Code{\%write} macro in the
+automatically generated SAS program. When you execute the program,
+the \Code{\%write} macro generates the log information table shown in
+Figure \ref{loginfo}.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ Objects Type Status Group
+
+ Probit.IterHistory Table Selected 1
+ Probit.ModelInfo Table Selected 2
+ Probit.NObs Table .
+ Probit.ClassLevels Table Selected 3
+ Probit.ParmInfo Table .
+ Probit.ResponseProfile Table .
+ Probit.Note Note .
+ Probit.LastGrad Table Selected 4
+ Probit.LastHess Table Selected 5
+ Probit.ConvergenceStatus Table .
+ Probit.Type3Analysis Table .
+ Probit.ParameterEstimates Table Selected 6
+\end{verbatim}
+\end{snugshade}
+\caption{SAS Log Information Table}\label{loginfo}
+\end{figure}
+
+ The table of information displays the fully qualified name for each
+ generated ODS object, its type, whether it is selected, and its
+ selection group.
+
+ Page breaks can occur only between
+ selection groups. You can control the grouping
+ as described in the section \ref{pagebreak} on page \pageref{pagebreak}.
+ For example, if you specify
+\Code{LastGrad LastHess} as \Code{<LastGrad LastHess>},
+ the two tables would be in the same group.
+
+ The order in which objects are created is determined by the
+ order in which they are generated, not the order in which they are
+ specified in the \Code{objects=} option.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\part{Reference Manual}
+\chapter{Overview}
+
+The preceding pages should provide the information to use the package
+in most scenarios. For more in-depth descriptions and methods for
+customization, see the following chapters.
+
+\begin{description}
+\item[Customizing \StatRep] describes several hooks for customizing
+the package and setting system-wide defaults.
+\item[About the Program Preamble] provides an overview of how the \StatRep
+package works with the SAS macros; a special file (the program preamble)
+provides a method of communication between the two.
+\item[Two Methods of Writing] describes how you can bypass the automatic
+code generation and use the \StatRep SAS macros directly.
+\item[\StatRep SAS Macros] describe in detail each SAS macro in the
+\StatRep package. You can use these macros yourself for maximum flexibility
+in creating a custom \StatRep document.
+\item[ODS Object Selection] describes how you can use options in the
+\cs{Listing} and \cs{Graphic} tag to specify exactly what output you want
+to display.
+\item[ODS Graphics] describes differences between ODS graphics and
+GRSEG graphics.
+\end{description}
+
+\chapter{Customizing \StatRep}\label{custom}
+ \index{customizing}\index{configuration}
+
+ You can modify the configuration file \Code{statrep.cfg} to change
+the following settings used by the \StatRep package.
+ See section \ref{secdefaults} for more information about macro variable defaults.
+
+ \begin{description}
+ \item[\cs{SRcaptionfont}] specifies the font for the output captions.
+ The default is \cs{sffamily} (\textsf{sans serif}).
+ \index{caption font}
+
+ \item[\cs{SRcaptioncontinuedfont}] specifies the font for the \Code{continued} name
+ for outputs that break across pages.
+ The default is \cs{sffamily}\cs{itshape} (\textsf{\textit{sans serif, italic}}).
+
+ \item[\cs{SRcontinuedname}] specifies the name that indicates that an output
+ block is continued. The name is used when an output stream breaks across a page.
+ The default is \Code{continued}.
+
+ \item[\cs{SRdefaultdests}] specifies the default ODS Destination for tabular
+ outputs. The default is \Code{listing}. You can specify \Code{latex} to produce
+ SAS-generated LaTeX tabular output. See appendix \ref{latexoutput} for details.
+ \index{LaTeX output}
+
+ \item[\cs{SRdpi}] specifies the default dots per inch (DPI) for SAS to use in generating
+ graphical output. The default is \Code{300}.
+ \index{dpi}
+
+ \item[\cs{SRgraphicdir}] specifies the name of the directory that contains the SAS
+ generated graphical output files. The default is \Code{png}.
+ \index{graphic directory}
+
+ \item[\cs{SRgraphtype}] specifies the format of the SAS
+ generated graphical output. You can specify either
+ \Code{png} or \Code{pdf}. The default is \Code{png}.
+ \index{graphics type}\index{PNG graphics}\index{PDF graphics}
+
+ \item[\cs{SRlatexdir}] specifies the name of the directory that contains the
+ SAS generated LaTeX tabular output. The default is \Code{tex}.
+ See appendix \ref{latexoutput} for details.
+
+ \item[\cs{SRlatexstyle}] specifies the ODS style for SAS to use to generate
+ LaTeX tabular output. The default is \Code{statrep}, a monochromatic style based
+ on the \Code{statistical} ODS style.
+ See appendix \ref{latexoutput} for details.
+
+ \item[\cs{SRodsgraphopts}] specifies a string that is passed as
+ ODS GRAPHICS statement options. For a complete explanation of all available options,
+ see the documentation of the ODS GRAPHICS statement in
+ \textit{SAS Output Delivery System: User's Guide}.
+ \index{ODS graphics options}
+
+ \item[\cs{SRintertext}] specifies the text to insert in
+ \Code{Datastep} environments that specify
+ the \Code{first=} option. The default is \Code{\mbox{... more data lines ...}}
+
+ \item[\cs{SRlinesize}] specifies the default line size to use in generating tabular
+ output and centering it for display. The default is \Code{80}.
+ \index{output width}\index{linesize}
+
+ \item[\cs{SRlistingdir}] specifies the name of the directory that contains the SAS
+ generated listing (tabular) output files. The default is \Code{lst}.
+
+ \item[\cs{SRmacropath}] specifies the path to the location of the
+ SAS macros that are bundled with the \Code{StatRep} package.
+ \index{SAS macro location}
+ For example, if you installed the \Code{statrep\_macros.sas} file to a directory named
+ \Code{C:\textbackslash mymacros},
+ then define macro \cs{SRmacropath} as follows:
+ \begin{verbatim}
+ \def\SRmacropath{c:/mymacros/statrep_macros.sas}
+ \end{verbatim}
+
+ Use the forward slash in the definition
+ as the directory name delimiter instead of the backslash, which is a special
+ character in \LaTeX. If you want to use a backslash character (\textbackslash), you
+ must insert it with the \LaTeX\ command, \cs{@backslashchar}.
+
+ The default value is the current path. That is, the default
+ definition for the \cs{SRmacropath} macro is the filename itself, \Code{statrep\_macros.sas}.
+
+ \item[\cs{SRmacroinclude}] specifies the line used in the generated SAS program to
+ include the SAS macros that are bundled with the \Code{StatRep} package.
+ The default is\\\Code{\%include }\cs{SRmacropath}~\Code{/nosource;}
+
+ \item[\cs{SRpagesize}] specifies the default page size for SAS to use in generating
+ tabular output. The default is \Code{500}.
+
+
+ \item[\cs{SRparindent}] specifies the amount of space to indent
+ \Code{Datastep} and \Code{Sascode} environments.
+ The argument is a dimension.
+ The default is \Code{3em} and is measured according to the font currently in use.
+
+ \item[\cs{SRprogramline}] specifies the first lines to include in the generated SAS program
+ after the \cs{SRmacroinclude} line.
+
+ The following default value calls a macro (from \Code{statrep\_macros.sas})
+ that removes the contents of the listing and graphic directories to ensure
+ that the generated graphs and listings from the SAS program are current.
+ The directories are created with
+ each SAS run that includes the macros themselves (via \Code{x} commands).
+\begin{snugshade}
+\begin{verbatim}
+ %hostdel;
+\end{verbatim}
+\end{snugshade}
+
+ \item[\cs{SRprogramname}] specifies the filename for the generated SAS
+ program. The default is \cs{jobname\_SR.sas}, where \cs{jobname} is
+ usually the stem name of the \LaTeX\ source file.
+
+
+ \item[\cs{SRstyle}] specifies the default ODS style for SAS to use to generate
+ graphical output. The default is \Code{Statistical}.
+ \index{ODS output style}
+
+ \item[\cs{SRtempfilename}] specifies the name of a temporary file
+ that is used as a scratch file in the current working directory.
+ The default is \Code{sr.tmp}.
+
+ \item[\cs{SRverbfont}] specifies the font to use for code within \Code{Datastep} and
+ \Code{Sascode} blocks. The default is \cs{ttfamily}\cs{bfseries}
+ (\texttt{\textbf{typewriter text, bold}}).
+ \index{verbatim font}
+
+ \end{description}
+
+ \chapter{About the Program Preamble}
+
+The \StatRep package automatically writes a preamble to the generated program and a preamble file.
+
+The preamble settings are split into two parts to support users who prefer to
+manually write the calls to the \StatRep macros and work interactively between the
+\LaTeX\ source document and a SAS session. For this use, you can include the external
+preamble file once in your SAS session and all the necessary settings are made for you.
+
+If you do not manually write calls to the \StatRep macros (you use the default, automated method),
+there is nothing you need to do---your generated program contains the lines that specify your settings.
+
+The preamble in the generated program includes the preamble file and deletes the contents of the
+output directories (\Code{lst}, \Code{tex}, and \Code{png}, by default) so that obsolete files are
+not included in the document.
+Figure \ref{fig:pgmpreamble} shows an example of the preamble lines
+that are written to the generated program.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+/*
+ This file is auto-generated by the statrep package.
+ Do not edit this file or your changes will be lost.
+ Edit the LaTeX file instead.
+
+ See the statrep package documentation and the file
+ statrep.cfg for information on these settings.
+ */
+
+
+%include "report_SR_preamble.sas" /nosource;
+/* Remove all output files. */
+%hostdel;
+
+/* Start program with a null title. */
+title;
+\end{verbatim}
+\end{snugshade}
+\caption{Generated SAS Program Preamble}\label{fig:pgmpreamble}
+\end{figure}
+
+ The external preamble file sets defaults, includes
+ the output-capture macros, and creates the output directories if they do not exist.
+ You can customize the preamble; see section \ref{custom} for details.
+ Figure \ref{fig:preamble} shows the default file preamble.
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+/*
+ This file is auto-generated by the statrep package.
+ Do not edit this file or your changes will be lost.
+ Edit the LaTeX file instead.
+
+ See the statrep package documentation and the file
+ statrep.cfg for information on these settings.
+ */
+
+
+/* Set and invoke macro variable defaults. */
+%let defaultlinesize=80;
+%let defaultpagesize=500;
+%let defaultdpi=300;
+%let defaultstyle=statistical;
+%let listingdir=lst;
+%let graphicdir=png;
+%let graphtype=png;
+%let odsgraphopts=;
+%let latexdir=tex;
+%let latexstyle=statrep;
+%let defaultdests=listing;
+
+options nodate nonumber
+ls=&defaultlinesize ps=&defaultpagesize
+formchar='|----|+|---+=|-/\<>*';
+
+ods graphics on;
+/* Include SAS macro definitions. */
+%include "statrep_macros.sas" /nosource;
+
+\end{verbatim}
+\end{snugshade}
+\caption{Generated Preamble File}\label{fig:preamble}
+\end{figure}
+
+\chapter{Two Methods of Writing}
+ To maximize flexibility, the \StatRep package provides two methods of writing code in your
+\LaTeX\ document.
+
+When you create your \LaTeX\ document, you can use either the automatic method described in
+chapter \ref{gs} (in which the SAS macro calls are generated automatically) or a manual
+method (in which you write the \Code{\%output}, \Code{\%endoutput}, and \Code{\%write} macros yourself).
+
+In the automatic method, each \Code{Sascode} code block generates an \Code{\%output} macro call at the beginning
+of the block and an \Code{\%endoutput} macro call at the end of the block.
+Each \cs{Listing} and \cs{Graphic} tag generates the \Code{\%write}
+macro to replay the selected output objects to external files.
+
+In the manual method, you decide where and when to make the macro calls.
+It is only in this respect that the method is manual: the
+\StatRep package still generates your SAS program and displays your code and results.
+
+The \StatRep package uses
+ the SAS macro comment (\Code{\%* \emph{comment} ;}) to provide line
+ commands within a \Code{Sascode}
+ block. Furthermore, any line of code that begins with a null macro
+ comment (\Code{\%*;})
+ is written to the SAS program and is not displayed.
+
+You can use the manual method when you want to do one or more of the following:
+\begin{itemize}
+\item capture specialized or complicated output
+\item capture print output with SAS 9.2 (see the \Code{\%startlist} macro in section \ref{startlist})
+\item capture output from the SAS log (see the \Code{\%startlog} macro in section \ref{startlog})
+\item work interactively when writing (you can interactively develop or debug a
+ certain section of your document by copying code from
+ your \LaTeX\ document and pasting it into a SAS session)
+\end{itemize}
+
+ You can use either method, and you can
+mix the methods in a single document. The manual method is provided for cases in which the
+automatic method is too inflexible. By using the line commands in a \Code{Sascode} environment,
+you are free to write your program as you want, while retaining control of the code that is
+displayed in your final PDF document.
+
+ Continuing with example shown in Figure \ref{fig:d1} and Figure \ref{fig:s1},
+ you can write the code yourself within your
+ \LaTeX\ document as shown in Figure \ref{fig:manual}
+ and obtain the identical code display and capture.
+
+\begin{figure}[H]
+\begin{framed}
+\begin{snugshade}
+{\hfil\textit{Datastep is identical}\hfil}
+\begin{verbatim}
+\begin{Datastep}
+proc format;
+ value $sex 'F' = 'Female' 'M' = 'Male';
+data one;
+ set sashelp.class;
+ format sex $sex.;
+run;
+\end{Datastep}
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+{\hfil\textit{\texttt{\%output} added manually}\hfil}
+\begin{verbatim}
+\begin{Sascode}
+ *; %output(class)
+proc reg;
+ model weight = height age;
+run;
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+{\hfil\textit{\texttt{\%write} macros added manually}\hfil}
+\begin{verbatim}
+ *; %write(rega, type=listing)
+ *; %write(regb, type=graphic)
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\begin{snugshade}
+{\hfil\textit{Listing and Graphic tags only caption and insert output}\hfil}
+\begin{verbatim}
+\Listing[caption={Regression Analysis}]{rega}
+\Graphic[caption={Graphs for Regression Analysis}]{regb}
+\end{verbatim}
+\end{snugshade}
+\end{framed}
+\caption{Using the SAS Macros Manually}\label{fig:manual}
+\end{figure}
+
+ The \Code{Datastep} environment in Figure \ref{fig:manual} is identical to that shown in the
+ Figure \ref{fig:d1}. However, the \Code{Sascode}
+ environment makes an explicit call to the \Code{\%output} macro to create
+ the ODS document that contains all the results from the code block.
+ Because this line begins with the null SAS macro comment (\Code{\%*;}), the line
+ is passed directly to the generated SAS program and is not displayed.
+
+ The \Code{\%endoutput} macro is not necessary when you are processing
+ only one ODS document. It is implicitly specified by the first \Code{\%write} macro.
+
+ Next are two explicit calls to the \Code{\%write} macro, which
+ specify the ODS objects to capture and the ODS document that the objects
+ should be taken from.
+ Both \Code{\%write} macros use the minimum number of options.
+ The first \Code{\%write} macro selects all
+ notes and tables from the last ODS document created. The second \Code{\%write} macro
+ selects all graphs from the last ODS document created.
+ Because the \Code{store=} option is omitted in both cases,
+ output from the most recently created ODS document is displayed.
+
+ Finally, the \cs{Listing} and \cs{Graphic} tags request the outputs.
+ In
+ this method, you do not place the options that are related to SAS in the
+ the \cs{Listing} and \cs{Graphic} tags. You need to
+ specify only the caption and filename prefix.
+
+
+ To summarize, the \Code{Datastep} environment is handled identically in either method,
+ the \Code{Sascode} environment can optionally produce the \Code{\%output} and \Code{\%endoutput} macros,
+ and the \cs{Listing} and \cs{Graphic} tags can optionally produce the \Code{\%write} macros.
+
+\chapter{\StatRep SAS Macros}\label{macros}
+\index{SAS macros}
+ SAS programs created by the \StatRep package
+ run SAS macros to capture output. The macros depend on the ODS document.
+ The ODS document is a destination or repository for the results
+ (tables, notes, titles, and graphs)
+ that come from SAS procedures. Each procedure step is run only once,
+ and the results are captured in an ODS document.
+ Then the parts of the ODS document are replayed using PROC DOCUMENT.
+
+ When \StatRep encounters a \Code{Sascode} environment,
+ it generates a macro call to create an ODS document from the environment.
+ When \StatRep encounters a \cs{Listing} or \cs{Graphic} tag,
+ it generates a macro call to replay output from that ODS document into an external file.
+
+ For the output that is generated in each \Code{Sascode} block, the SAS macros provide you
+ with a list of all
+ of the objects in the ODS document and a table that displays
+ the objects selected for display. You can
+ review this list in the SAS log.
+ It is important to check these lists to ensure that either all output
+ is included somewhere or any omissions are deliberate.
+
+ The following macros are defined:
+ \begin{itemize}
+ \item The \Code{\%output} and \Code{\%endoutput} macros open and close an ODS document, respectively.
+ When you use \StatRep to automatically generate your program, these macros are called at the
+ beginning and end of a \Code{Sascode} block, respectively.
+ You can manually call the macros at any time within
+ a \Code{Sascode} block by prefixing the call with a null SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!output}\index{SAS macros!endoutput}
+
+ \item The \Code{\%write} macro writes ODS objects that are contained in an ODS document to
+ one or more external files.
+ When you use \StatRep to automatically generate your program, this macro is called when
+ a \cs{Listing} or \cs{Graphic} tag is encountered. You can manually call the macro
+ at any time within a \Code{Sascode} block by prefixing the call with a null
+ SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!write}
+
+ \item The \Code{\%startlist} and \Code{\%endlist} macros capture printed content
+ (for example, a PROC PRINT or DATA step) to an external file. To use these macros,
+ you must manually call the macro
+ within a \Code{Sascode} block and prefix the call with a null
+ SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!startlist}\index{SAS macros!endlist}
+
+ \item The \Code{\%startlog} and \Code{\%endlog} macros capture content from the
+ SAS log to an external file. To use these macros,
+ you must manually call the macro
+ within a \Code{Sascode} block and prefix the call with a null
+ SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!startlog}\index{SAS macros!endlog}
+ \end{itemize}
+
+
+ \section{The \texttt{\%output} and \texttt{\%endoutput} Macros}\label{outputmacro}
+ The \Code{Sascode} environment writes the \Code{\%output} and \Code{\%endoutput} macros to
+ the generated program
+ whenever the \Code{store=} option is specified.
+ However, you can call the macros
+ yourself by omitting the \Code{store=} option in the \Code{Sascode} environment and
+ call the macros within the \Code{Sascode} environment. Each call must be prefixed
+ with a null SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!output}\index{SAS macros!endoutput}
+
+ The \Code{\%output} macro supports two other options (\Code{style=} and \Code{dpi=}) that are used to
+ set parameters for GRSEG graphs. These options are not supported in the
+ \Code{Sascode} environment options. If you want to change the style or DPI for
+ GRSEG graphs, you must call the \Code{\%output} and \Code{\%endoutput} macros manually.
+
+ The following options are supported by the \Code{\%output} macro:
+ \begin{description}
+ \item[\Code{store=}] specifies the name of the ODS document.
+ This name is used in the \Code{store=} option in the \cs{Listing} and \cs{Graphic} tags
+ or in the \Code{\%write macro}.
+
+ \item[\Code{style=}] specifies the style used for GRSEG graphs.
+ The default is \Code{HTMLBlue}. See section \ref{grseg} for details.
+
+ \item[\Code{dpi=}] specifies the dots per inch (DPI) setting used for GRSEG graphs.
+ The default is 300 DPI. See section \ref{grseg} for details.
+ \end{description}
+
+
+ \section{The \texttt{\%write} Macro}
+ The \Code{\%write} macro supports the same key-value options as the \cs{Listing} and
+ \cs{Graphic} tags support.
+ The \StatRep package generates the \Code{\%write} macro in the SAS program
+ file whenever the \Code{store=} option is specified in the output tag.
+ However, you can call the macros
+ yourself by omitting the \Code{store=} option in the \cs{Listing} or \cs{Graphic}
+ tag and call the macro within a \Code{Sascode} environment. Each call must be prefixed
+ with a null SAS macro comment (\Code{\%*;}).
+ \index{SAS macros!write}
+See the section \titleref{sasopts} for more information about the options used in the
+\cs{Listing} and \cs{Graphic} tags that are passed to the \Code{\%write} macro.
+
+
+\vspace*{1em}\noindent\textbf{Note:} If you use the macros interactively, be aware that
+these macros open and close ODS destinations,
+enable and disable ODS Graphics, and change ODS options. Output capture uses the
+LISTING destination, and when the \Code{\%write} macro finishes, only the
+LISTING destination remains open.
+If you need other ODS destinations for your work, you need to reset them
+when you are done with a section of output capture. For example,
+if you are using the HTML destination
+in the SAS windowing environment, then you need to
+close the LISTING destination and reopen the HTML destination when you finish
+capturing output.
+
+ \section{The \texttt{\%startlist} and \texttt{\%endlist} Macros}\label{startlist}
+
+ The \Code{\%startlist} and \Code{\%endlist} macros capture printed information
+ from the ODS listing destination. The macros are used when
+ you create output with a procedure that does not support ODS.
+ They are also used when you use the
+ \Code{DATA \_NULL\_} and \Code{PUT \_ODS\_} SAS statements to
+ manually capture output.
+ \index{SAS macros!startlist}\index{SAS macros!endlist}
+
+ These macros are not automatically generated by the \StatRep package.
+ You must call them
+ manually within a \Code{Sascode} environment (with each call preceded
+ by a null SAS macro comment).
+
+ In SAS 9.2, PROC PRINT is not fully integrated into the ODS document,
+ unless you specify PROC PRINT with no options.
+ If you specify PROC PRINT
+ with options, you must use the \Code{\%startlist} and \Code{\%endlist}
+ macros to capture output.
+
+ If you use PROC PRINT in SAS 9.3 or later,
+ you can use the \Code{\%output} and \Code{\%write} macros as you would with
+ any SAS procedure.
+
+ The \Code{\%startlist} macro has one mandatory argument, the filename prefix
+ of the file to contain
+ the output. The argument is also used
+ in the \cs{Listing} tag to insert the output.
+
+ The \Code{\%startlist} macro supports the following options after
+ the filename argument, separated with a comma (,):
+ \begin{description}
+ \item[\Code{linesize=}] specifies the line size.
+ The default is the line size currently in effect.
+ This specification lasts for the duration of this step.
+ The current line size is restored at the end.
+ When you specify the \Code{linesize=} option in the \Code{\%startlist}
+ macro, be sure to make the same specification
+ in the \cs{Listing} tag you use to insert the output.
+
+ \item[\Code{pagesize=}] specifies the size of the output page.
+ The default is the page size currently in effect.
+ This specification lasts for the duration of this step.
+ The current page size is restored at the end.
+ This option is useful for breaking up long listings into smaller parts to allow for page breaks.
+ If a listing output spans more than one SAS page,
+ the output is automatically split into parts and the page breaks
+ can occur only between parts of output.
+ For more information about capturing large outputs, see section \ref{large}.
+ \end{description}
+
+ \section{The \texttt{\%startlog} and \texttt{\%endlog} Macros}\label{startlog}
+
+ The \Code{\%startlog} and \Code{\%endlog} macros capture SAS notes
+ or error messages from the SAS log. They also capture output
+ from some SAS/IML functions that write to the SAS log rather than using ODS.
+ \index{SAS macros!startlog}\index{SAS macros!endlog}
+
+ These macros are not automatically generated by the \StatRep package.
+ To capture content from the SAS log, you must call these macros
+ manually within a \Code{Sascode} environment (with each call preceded
+ by a null SAS macro comment).
+
+ The \Code{\%startlog} macro has one mandatory argument, the filename prefix
+ of the file to contain the output. The argument is also used in the \cs{Listing}
+ tag to insert the output.
+
+ The \Code{\%endlog} macro supports the following options,
+ separated by a comma (,):
+
+ \begin{description}
+ \item[\Code{code=}] specifies whether program code in the SAS log is included.
+ By default, code is captured (\Code{code=1}). Set \Code{code=0} to exclude code.
+ \item[\Code{range=}] specifies a Boolean expression to select
+ certain observations. For example, you can specify \Code{range=\_n\_ <= 5 }
+ to select the first five lines. You can specify
+ \Code{range=not index(line, 'ERROR')} to select all lines that do not contain the string
+ `ERROR'. Selection must be based on \Code{\_n\_} or the variable \Code{line}, which
+ contains a single line of the log.
+ \end{description}
+
+ \section{Macro Variable Defaults}\label{secdefaults}
+ \index{macro variables}\index{default settings}\index{package!defaults}
+ \index{SAS macros!variables}
+
+ The SAS macro defaults are set globally in the file \Code{statrep.cfg}.
+ See section \ref{custom} for details. You can also reset the
+ defaults within your document by specifying new settings in a \Code{Sascode}
+ environment.
+
+ Table \ref{defaults} shows the description and default values for each
+ macro variable.
+
+ \begin{table}[H]
+ \centering\caption{Default Values for Macro Variables}\label{defaults}
+ \begin{tabular}{llP{2.5in}}
+ \textbf{Macro Variable} & \textbf{Default} & \textbf{Description}\\
+ \hline
+ \Code{defaultlinesize} & 80 & Line size for tabular ODS output\\
+ \Code{defaultpagesize} & 500 & Page size for tabular ODS output\\
+ \Code{defaultstyle} & Statistical & ODS style for graphical output \\
+ \Code{defaultdpi} & 300 & Dots per inch (DPI) for graphical output\\
+ \Code{graphtype} & png & graphics file format ('png' or 'pdf')\\
+ \Code{odsgraphopts} & & string containing ODS graphics options\\
+ \Code{defaultdests} & listing & \texttt{listing} or \texttt{latex} tabular output\\
+ \Code{latexstyle} & statrep & ODS Style for SAS-generated LaTeX output\\
+ \hline
+ \end{tabular}
+ \end{table}
+
+ You can edit the \Code{statrep.cfg} file\index{customizing}\index{statrep.cfg}
+ \index{configuration}%
+ to globally reset the defaults, or you can specify commands to change the default anywhere
+ in your document. For example, the following lines change all of the macro variable
+ default settings for the duration of the program. The \Code{program} option specifies
+ that the code be written only to the generated program and not displayed.
+
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+ \begin{Sascode}[program]
+ %let defaultlinesize=96;
+ %let defaultpagesize=50;
+ %let defaultstyle=statistical;
+ %let defaultdpi=100;
+ %let graphtype=pdf;
+ %let odsgraphopts=antialiasmax=10000;
+ \end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Reset SAS Macro Defaults within Document with SAS}\label{reset}
+\end{figure}
+
+ When you change the \Code{defaultlinesize} in the \Code{statrep.cfg} file, the same value
+ is automatically used by SAS and by the \StatRep package.
+ When you change the \Code{defaultlinesize} inside your document,
+ you change the line size used by SAS in generating
+ outputs; You must also set the line size in the \cs{Listing} tag to match.
+
+ The setting of \Code{defaultpagesize=500} produces a large
+ virtual page so that SAS does not break ODS objects into smaller pieces.
+ When a stream of outputs is typeset, page breaks can occur only between ODS objects or
+ when SAS forces a page break inside an ODS table.
+
+ The macro options and default macro variables work as follows:
+ If an option is specified in a macro, its value is used regardless of
+ the specification in the default macro variables.
+ If an option is not specified in a macro, the default macro variables provide
+ the values.
+
+ In summary, a direct option specification in a macro takes precedence over the default
+ settings, and you can change the default settings by resetting the
+ default macro variables
+ in your document or by editing the \Code{statrep.cfg} file.
+
+ \chapter{ODS Object Selection}\label{selection}
+To select and display ODS objects, you specify options in the \cs{Listing} tag, \cs{Graphic}
+ tag, or the \Code{\%write} macro.
+\label{optionopt}
+By default, when you omit object selection options, the \Code{\%write} macro selects all ODS objects,
+the \cs{Listing} tag selects all ODS tables and notes, and the \cs{Graphic} tag selects all ODS graphs.
+\index{ODS object selection}
+ Table \ref{tabselect} summarizes how you select ODS objects.
+ \begin{table}[H]
+ \centering\caption{ODS Object Selection Options}\label{tabselect}
+ \begin{tabular}{lP{3.75in}}
+ \textbf{Option} & \textbf{Action}\\
+ \hline
+ \Code{options=table} & Select all tables and notes\\
+ \Code{options=graph} & Select all graphs \\
+ \Code{pattern=} \textit{pattern} &
+Select all objects with a name matching a pattern.
+When an ODS object name has more than two levels,
+ the middle level name is a group name. You can specify the \Code{pattern=} option
+ to select all ODS objects in the specified ODS group.
+ More generally, you can specify any pattern to select all objects
+ whose path contains the pattern.\\
+ \Code{firstobj=} & Specifies the first object in the output stream to capture.
+ The specified and subsequent objects are captured.\\
+ \Code{lastobj=} & Specifies the last object in the output stream to capture.
+The first object in the stream to capture is the first object produced by the
+\Code{Sascode} code block or the object specified in the \Code{firstobj=} option.\\
+ \Code{objects=} option & Specifies a space-separated list of objects to capture.\\
+ \hline
+ \end{tabular}
+ \end{table}
+
+ The \Code{firstobj=} and \Code{lastobj=} options can be modified with the option
+ \Code{options=skiplast} and \Code{options=skipfirst}. For more information about
+ how to use these options,
+ see page \pageref{skiplast}.
+
+ \section{Page Breaks}\label{pagebreak}
+ By default, a page break can occur between any two objects in the output stream.
+ However, you can use left and right angle brackets, \Code{<>}, to delineate a
+ set of objects in which to suppress breaks.
+ You use the symbols in the \Code{objects=} option list in
+ a \cs{Listing} tag, a \cs{Graphic} tag, or a \Code{\%write} macro.
+
+
+ For example, you can use the symbols to prevent a break between a
+ ``Parameter Estimates'' table and the ``Fit Statistics'' table that follows it
+ with the following option:
+ \Code{objects = < ParameterEstimates FitStatistics >}
+
+ After the \Code{<} symbol, breaking is suppressed until the \Code{>} symbol is encountered.
+ After the \Code{>} symbol, a break is introduced and normal breaking continues.
+
+ In summary:
+ \begin{itemize}
+ \item You can use the \Code{<>} symbols in pairs to keep ODS objects together.
+ \item You can use the \Code{>} symbol (unpaired with a matching \Code{<}) to create a break between tables.
+ \item You can use the \Code{<} symbol (unpaired with a matching \Code{>}) to suppress all breaks.
+ \end{itemize}
+
+ A break is always allowed before and after a graph.
+
+ See page \pageref{skiplast} for an alternate method of controlling breaks
+ with the \Code{options=nopage} and \Code{options=onebox} options.
+
+ \chapter{ODS Graphics}
+ \index{ODS graphics}
+
+ In SAS 9.3 and later, ODS Graphics is enabled by default in the SAS windowing environment.
+ ODS Graphics is not enabled by default in batch mode and in the SAS windowing environment in SAS 9.2.
+ When ODS Graphics is not enabled by default, you can enable ODS Graphics by specifying the following statement:
+
+\begin{snugshade}
+\begin{verbatim}
+ ods graphics on;
+\end{verbatim}
+\end{snugshade}
+
+
+You can enable ODS Graphics in \StatRep for all steps by providing this code block at the
+beginning of your LaTeX document:
+
+\begin{snugshade}
+\begin{verbatim}
+ \begin{Sascode}[program]
+ ods graphics on;
+ \end{Sascode}
+\end{verbatim}
+\end{snugshade}
+
+ \section{ODS Graphics and GRSEG Graphics}
+ \label{grseg}
+ \index{ODS graphics}\index{GRSEG graphics}
+ When you create a graph with ODS Graphics, the style and dots per inch (DPI) can be changed
+ after the graph is created. The style and DPI are set when the
+ graph is written to the external file. This enables you to specify the options
+ in the \cs{Graphic} tag or in the \Code{\%write} macro.
+
+ On the other hand, when you create a GRSEG graph, the style and DPI
+ are set when the graph is created. That is why you must specify the options
+ in the \Code{\%output} macro. See section \ref{outputmacro} for details
+ about the \Code{\%output} macro options.
+
+ Table \ref{tabgraph} summarizes the methods you can use to modify the
+ style and DPI settings when you create a graph.
+
+ \begin{table}[H]
+ \centering
+ \caption{Methods to Change Graph Properties}\label{tabgraph}
+ \begin{tabular}{lcc}
+ \textbf{Method} & \textbf{ODS Graph} & \textbf{GRSEG Graph} \\
+ \hline
+ \cs{Graphic} tag options & Yes & No \\
+ \Code{\%write} macro options & Yes & No \\
+ \Code{\%output} macro options & No & Yes \\
+ Reset global default & Yes & Yes \\
+ \hline
+ \end{tabular}
+ \end{table}
+
+ The \cs{Graphic} tag, the \Code{\%write} macro, and the
+ \Code{\%output} macro have \Code{style=} and \Code{dpi=} options. For more information
+ about these options, see section \ref{sasopts}.
+ Also, see section \ref{secdefaults} for details about
+ using the SAS macro variables to reset global defaults.
+
+ For GRSEG graphs, there are only two choices for DPI: 300 (the default) and 96.
+ When the DPI is set to anything other than 300,
+ then 96 is automatically used instead for GRSEG graphs.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Advanced Examples}
+
+
+\section{Capturing PRINT Output}\index{SAS macros!startlist}\index{SAS macros!endlist}
+ Figure \ref{printoutput} shows simple use of the \Code{\%startlist} and \Code{\%endlist}
+ macros.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}
+ *; %startlist(myprtlabel);
+ proc print data=sashelp.class(obs=10) noobs;
+ run;
+ *; %endlist;
+\end{Sascode}
+
+\Listing[caption={Mass Analysis}]{myprtlabel}
+\end{verbatim}
+\end{snugshade}
+\caption{Capturing Print Output with the \texttt{\%startlist} and
+\texttt{\%endlist} Macros}\label{printoutput}
+\end{figure}
+
+ The \Code{\%startlist} macro opens the ODS listing destination for writing.
+ The PRINT procedure code is executed, and the \Code{\%endlist} macro closes the ODS destinations.
+ The result is an output file called \Code{myprtlabel.lst}, which is
+ inserted into the document with the \cs{Listing} tag.
+
+ The following section describes how to use the \Code{\%startlist} and \Code{\%endlist}
+ macros to capture and display part of a table.
+
+
+\section{Capturing Large Tables}\label{large}
+
+ The \StatRep package automatically takes care of all page breaks in the output.
+ Pages are allowed to break between groups of ODS objects or wherever there is a new page
+ in the listing output.
+
+ In some cases, an ODS object is too large to fit on a page.
+ There are two ways to handle such large tables:
+ \begin{itemize}
+ \item Set the page size to a smaller size so that a single ODS object is broken into pieces
+ by using the SAS system option to control the size of the output parts.
+ By default, a large page size is
+ in effect (\Code{defaultpagesize=500}) and each table appears
+ as a complete output block. However, when you have tables that are
+ too long to fit on a page (that is, single ODS objects that will not fit on a page),
+ you must specify a smaller page size
+ (for example, \Code{pagesize=50}).
+ The tables will automatically split using the normal SAS
+ rules for splitting tables.
+
+ \item Save the ODS object to a SAS data set and manipulate the data set
+ so that it contains only part of the original output. Use PROC PRINT
+ or DATA step statements to generate and capture the modified data set.
+
+ \end{itemize}
+
+ Figure \ref{odsdataset} shows an
+ example of using a SAS data set to manipulate
+ the ODS object resulting from a problem that is very
+ slow to converge. The output from this step includes a long iteration
+ history table.
+ The goal is to display only the first few and last few lines of
+ the iteration history table.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[store=doc]
+proc prinqual data=X n=1 maxiter=2000
+ plots=transformation out=results;
+ *; ods output mtv=m convergencestatus=c;
+ title 'Linearize the Scatter Plot';
+ transform spline(X1-X3 / nknots=9);
+run;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Capturing Output to an ODS Output Data Set}\label{odsdataset}
+\end{figure}
+
+ Any arbitrary SAS statement can be sent to the generated program by preceding
+ it with a null SAS macro comment (\%*;).
+ With the output generated and the ODS document \Code{doc} created,
+ the \Code{Sascode} block shown in Figure \ref{odsmanip} is passed directly
+ to the generated program and not displayed.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}[program]
+%startlist(prqdb)
+title3 'The PRINQUAL Procedure';
+title5 'PRINQUAL MTV Algorithm Iteration History';
+title6 ' ';
+
+data _null_;
+ set m(rename=(variance=rsquare));
+ if _n_ le 13 or _n_ gt 1669;
+ if 11 le _n_ le 13 then do;
+ iternum = .; avechange = ._; criterionchange = ._;
+ maxchange = ._; rsquare = ._;
+ end;
+ file print ods=(template='Stat.Transreg.MTV');
+ put _ods_;
+run;
+title;
+
+data _null_;
+ set c;
+ file print;
+ put @8 reason;
+run;
+%endlist;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Manipulating the ODS Output Data Set for Printing}\label{odsmanip}
+\end{figure}
+
+ The \Code{\%startlist} macro opens the file \Code{prqdb}
+ to contain the printed results of the code block.
+ The DATA step reads, manipulates, and prints the data set \Code{m}
+ that was just created by PROC PRINQUAL, and the printed content is written to the
+ output file \Code{prqdb.lst}, which is shown in Figure \ref{odsmanipresult}.
+
+\begin{figure}[H]
+\footnotesize
+\begin{snugshade}
+\begin{verbatim}
+ Linearize the Scatter Plot
+
+ The PRINQUAL Procedure
+
+ PRINQUAL MTV Algorithm Iteration History
+
+ Iteration Average Maximum Proportion Criterion
+ Number Change Change of Variance Change Note
+ -------------------------------------------------------------------------
+ 1 0.15125 0.93453 0.92376
+ 2 0.04589 0.14682 0.98030 0.05653
+ 3 0.03154 0.10125 0.98626 0.00596
+ 4 0.02258 0.06890 0.98890 0.00265
+ 5 0.01682 0.04777 0.99028 0.00137
+ 6 0.01297 0.03782 0.99106 0.00078
+ 7 0.01032 0.03029 0.99154 0.00048
+ 8 0.00851 0.02514 0.99186 0.00032
+ 9 0.00722 0.02124 0.99209 0.00023
+ 10 0.00625 0.01871 0.99226 0.00017
+ .
+ .
+ .
+ 1670 0.00001 0.00005 0.99371 0.00000
+ 1671 0.00001 0.00005 0.99371 0.00000
+ 1672 0.00001 0.00005 0.99371 0.00000 Converged
+
+ Algorithm converged.
+\end{verbatim}
+\end{snugshade}
+\caption{Result of Printing ODS Output Data Set}\label{odsmanipresult}
+\end{figure}
+
+
+ Similarly, Figure \ref{printods} creates an output data set in the first step.
+ The second step reads in the data set and uses PROC PRINT to display
+ the first 10 rows of a table.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}
+ title2 'Binary Table';
+
+ *---Perform Multiple Correspondence Analysis---;
+ proc corresp data=Cars binary;
+ *; ods output rowcoors=rc;
+ ods select RowCoors;
+ tables Origin Size Type Income Home Marital Sex;
+ run;
+\end{Sascode}
+\begin{Sascode}[program]
+%startlist(crse1n)
+proc print data=rc(obs=10) noobs label;
+ label label = '00'x;
+ title4 'The CORRESP Procedure';
+ title6 'Row Coordinates';
+run;
+%endlist;
+\end{Sascode}
+\end{verbatim}
+\end{snugshade}
+\caption{Capturing PROC PRINT Output from an ODS Data Set}\label{printods}
+\end{figure}
+
+\section{Capturing Log Output}
+ \index{SAS macros!startlog}\index{SAS macros!endlog}
+
+ The SAS/IML example shown in Figure \ref{logout} illustrates
+ the use of the macros that capture log output. In this example, the goal is to
+ display SAS/IML error messages\footnote{The example code generates an error because
+ of a variable scoping issue.
+ Module \Code{Mod7} is called from module \Code{Mod8}. Therefore, the variables
+ available to \Code{Mod7} are those defined in the scope of \Code{Mod8}.
+ Because no variable named \Code{x} is in the scope of \Code{Mod8},
+ an error occurs on the PRINT statement in \Code{Mod7}.
+ An error would not occur if \Code{Mod7} was called from the main scope,
+ because \Code{x} is defined at main scope.}.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}
+ *; %startlog(psmodb)
+proc iml;
+ x = 123;
+
+ start Mod7;
+ print "In Mod7:" x;
+ finish;
+
+ start Mod8(p);
+ print "In Mod8:" p;
+ run Mod7;
+ finish;
+ run Mod8(x);
+
+ *; %endlog;
+\end{Sascode}
+\Listing[caption={Error Message When a Variable is
+ Not Defined in a Module}]{psmodb}
+\end{verbatim}
+\end{snugshade}
+\caption{Capturing Log Output}\label{logout}
+\end{figure}
+
+ The captured log output is shown in Figure \ref{logcomplete}.
+
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+1599 +proc iml;
+NOTE: IML Ready
+1600 + x = 123;
+1601 +
+1602 + start Mod7;
+1603 + print "In Mod7:" x;
+1604 + finish;
+NOTE: Module MOD7 defined.
+1605 +
+1606 + start Mod8(p);
+1607 + print "In Mod8:" p;
+1608 + run Mod7;
+1609 + finish;
+NOTE: Module MOD8 defined.
+1610 +
+1611 + run Mod8(x);
+ERROR: Matrix x has not been set to a value.
+
+ statement : PRINT at line 1603 column 7
+ traceback : module MOD7 at line 1603 column 7
+ module MOD8 at line 1608 column 7
+
+NOTE: Paused in module MOD7.
+NOTE: Exiting IML.
+NOTE: The SAS System stopped processing this step because of errors.
+\end{verbatim}
+\end{snugshade}
+\caption{Complete Log Output Capture}\label{logcomplete}
+\end{figure}
+
+ The \Code{\%startlog} macro opens the specified file for writing, the IML
+ procedure code is executed, and the \Code{\%endlog} macro closes the file.
+
+ To omit the PROC IML code from the captured log output,
+ specify the \Code{code=0} option in the \Code{\%endlog} macro as follows:
+
+\begin{snugshade}
+\begin{verbatim}
+ %*; %endlog(code=0);
+\end{verbatim}
+\end{snugshade}
+
+ With the \Code{code=0} option specified, the captured log output is
+ displayed as shown in Figure \ref{lognoproc}.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+NOTE: IML Ready
+NOTE: Module MOD7 defined.
+NOTE: Module MOD8 defined.
+ERROR: Matrix x has not been set to a value.
+
+ statement : PRINT at line 1651 column 7
+ traceback : module MOD7 at line 1651 column 7
+ module MOD8 at line 1656 column 7
+
+NOTE: Paused in module MOD7.
+NOTE: Exiting IML.
+NOTE: The SAS System stopped processing this step because of errors.
+\end{verbatim}
+\end{snugshade}
+\caption{Log Output Capture: Procedure Code Omitted}\label{lognoproc}
+\end{figure}
+
+ You can further refine the captured log output with the
+ \Code{range=} option in the \Code{\%endlog} macro as follows:
+
+\begin{snugshade}
+\begin{verbatim}
+ %*; %endlog(code=0, range=_n_ > 6 and _n_ le 24);
+\end{verbatim}
+\end{snugshade}
+ With the both options specified, the captured log output is displayed as
+ shown in Figure \ref{logabbrev}.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+NOTE: Module MOD7 defined.
+NOTE: Module MOD8 defined.
+ERROR: Matrix x has not been set to a value.
+
+ statement : PRINT at line 1722 column 7
+ traceback : module MOD7 at line 1722 column 7
+ module MOD8 at line 1727 column 7
+
+NOTE: Paused in module MOD7.
+\end{verbatim}
+\end{snugshade}
+\caption{Abbreviated Log Output Capture: Procedure Code Omitted}\label{logabbrev}
+\end{figure}
+
+ The \Code{range=\_n\_ > 6 and \_n\_ le 24} option specifies that only the lines between 6 and 24
+ be included in the captured output.
+ The value of \Code{\_n\_} refers to the original line numbers before any filtering is done.
+
+
+\section{Capturing Output with Interactive Procedures}
+ You can use the \StatRep package to capture output from interactive procedures.
+Figure \ref{interact} shows how to capture output from the interactive
+ IML procedure. It displays three \Code{Sascode} environments with \cs{Listing}
+ outputs interleaved.
+
+\begin{figure}[H]
+\begin{snugshade}
+\begin{verbatim}
+\begin{Sascode}
+ *; %output(doc)
+ proc iml;
+ x = 1;
+ print x;
+\end{Sascode}
+
+\Listing[caption={x = 1}]{x1a}
+
+\begin{Sascode}
+ x = 2;
+ print x;
+\end{Sascode}
+
+\Listing[caption={x = 2}]{x2a}
+
+\begin{Sascode}
+ x = 3;
+ print x;
+ *; %write(x1a, objects=x)
+ *; %write(x2a, objects=x#2)
+ *; %write(x3a, objects=x#3)
+\end{Sascode}
+
+\Listing[caption={x = 3}]{x3a}
+\end{verbatim}
+\end{snugshade}
+\caption{Capture Output with an Interactive Procedure}\label{interact}
+\end{figure}
+
+ When you need to interleave \Code{Sascode} blocks to make a single ODS
+ document, as in Figure \ref{interact}, you cannot rely on the \StatRep package to
+ automatically write the macros. You must write the output capture macros manually.
+
+ When the \StatRep package automatically writes the macros, there is a
+ one-to-one correspondence between a \Code{Sascode} block and an ODS document.
+ The interactive procedure terminates when the ODS document is closed.
+
+ Figure \ref{interact} uses three \Code{Sascode} blocks to create a single ODS document.
+ The contents of that ODS document are displayed in three separate listings.
+ The ODS document is created by the \Code{\%output(doc)} statement in the first
+ \Code{Sascode} environment, and it is closed by the first \Code{\%write}
+ macro in the third \Code{Sascode} environment.
+ The three \Code{\%write} macros create the output for the
+ three output listings.
+ The fact that two of the \cs{Listing} lines come before any of the output is
+ created does not pose a problem.
+
+\section{Capturing and Displaying Numerical Results in Text}
+
+This example shows how you can capture SAS output values and display them in text.
+For example, suppose you want to capture the R-square values from a PROC REG
+step and a PROC GLM step and then display those values
+(but not display the steps) in your document.
+
+Use the following steps to capture the values and display them in text:
+
+\begin{enumerate}
+\item In your document source file, anywhere before you want to display the
+ captured values, include the following command to
+ input a \LaTeX\ file (named\newline\texttt{myconstants.tex} in this example)
+ to contain the \LaTeX\ definitions of the captured values:
+\begin{snugshade}
+\begin{verbatim}
+ \input{myconstants}
+\end{verbatim}
+\end{snugshade}
+
+The \texttt{myconstants.tex} file is actually generated in step 3,
+but you can include the preceding command before the file is generated
+because the SAS output capture program will create the file and write
+the definitions before pdf\LaTeX\ generates the final PDF file.
+
+\item Include one or more procedure steps, such as the following
+ PROC REG and PROC GLM steps, which produce tables of fit statistics
+ that are named \texttt{fsr} and \texttt{fsg}, respectively:
+\begin{snugshade}
+\begin{verbatim}
+ \begin{Sascode}
+ proc reg data=sashelp.class;
+ model weight = height;
+ %*;ods output fitstatistics=fsr;
+ run; quit;
+
+ proc glm data=sashelp.class;
+ class sex;
+ model weight = sex | height;
+ %*;ods output fitstatistics=fsg;
+ run; quit;
+ \end{Sascode}
+\end{verbatim}
+\end{snugshade}
+
+Include a null macro comment at the beginning of the ODS OUTPUT statement
+in each step to cause the step to be run in the capture program but not be
+displayed in the text.
+
+\item Near the end of your document source file, include code such as the
+ following to generate the \texttt{myconstants.tex} file, extract the
+ R-square values from the \texttt{fsr} and \texttt{fsg} tables of fit statistics that were
+ generated in step 2, and write those values to \texttt{myconstants.tex}.
+ The \texttt{Sascode} environment option, \texttt{program},
+ runs the code without displaying it in the text.
+\begin{snugshade}
+\begin{verbatim}
+ \begin{Sascode}[program]
+ data _null_;
+ file 'myconstants.tex' termstr=nl;
+ set fsr(keep=label2 nvalue2 where=(label2='R-Square'));
+ put '\def \regrsq{' nvalue2 6.4 '}';
+ set fsg(keep=rsquare);
+ put '\def \glmrsq{' rsquare 6.4 '}';
+ run;
+ \end{Sascode}
+\end{verbatim}
+\end{snugshade}
+
+\item Include the tags that are contained
+ in the \texttt{myconstants.tex} file when you want to display
+ the values of those tags, as follows:
+\begin{snugshade}
+\begin{verbatim}
+ The R-square values are \regrsq\ and \qlmrsq, respectively.
+\end{verbatim}
+\end{snugshade}
+ Include a backslash after the tag when you need to include a space after the value.
+\end{enumerate}
+
+When you execute the generated SAS program, SAS writes the
+following tags in the \texttt{myconstants.tex} file:
+\begin{snugshade}
+\begin{verbatim}
+ \def \regrsq{0.7705}
+ \def \glmrsq{0.7930}
+\end{verbatim}
+\end{snugshade}
+
+When pdf\LaTeX\ processes the file, it replaces the
+\verb+\regrsq+ and \verb+\glmrsq+ tags with the values that were
+written to the \texttt{myconstants.tex} file and produces the
+following:
+\begin{snugshade}
+ The R-square values are 0.7705 and 0.7930, respectively.
+\end{snugshade}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\appendix
+\part{Appendix}
+%\chapter{Appendix}
+
+\chapter{Installation and Requirements}\label{install}\index{installing}
+You can install the \StatRep package by downloading \Code{statrep.zip} from \url{support.sas.com/StatRepPackage}.
+
+Table \ref{ziptable} shows the contents:
+\begin{table}[H]
+\caption{Contents of the \Code{statrep.zip} File}\label{ziptable}
+\begin{tabular}{ll}
+\hline
+\textbf{Filename} & \textbf{Description}\\
+\Code{doc/statrepmanual.pdf} & The \textit{\StatRep User's Guide} (this manual)\\
+\Code{doc/quickstart.tex} & A template and tutorial sample \LaTeX\ file\\
+\Code{sas/statrep\_macros.sas} & The \StatRep SAS macros \\
+\Code{sas/statrep\_tagset.sas} & The \StatRep SAS tagset for LaTeX tabular output \\
+\Code{statrep.ins} & The \LaTeX\ package installer file\\
+\Code{statrep.dtx} & The \LaTeX\ package itself\\
+\hline
+\end{tabular}
+\end{table}
+
+Unzip the file \Code{statrep.zip} to a temporary directory and
+perform the following steps:
+
+\section{Step 1: Install the StatRep SAS Macros}
+
+ Copy the file \Code{statrep\_macros.sas} to a local directory. If you have a
+ folder where you keep your personal set of macros, copy the file
+ there. Otherwise, create a directory such as
+ \Code{C:\textbackslash{}mymacros} and copy the file into that directory.
+
+\section{Step 2: Install the StatRep LaTeX Package}
+
+ These instructions show how to install the StatRep package
+ in your \LaTeX\ distribution for your personal use.
+
+ \begin{enumerate}[a)]
+ \item
+ \textbf{Mik\TeX\ users}: If you do not have a directory for your own
+ packages, choose a directory name to contain your packages
+ (for example, c:\textbackslash{}localtexmf).
+
+ In the following instructions, this directory is referred to as the
+ "root directory".
+
+ \textbf{\TeX{}Live users}:
+ If you maintain a system-wide LaTeX distribution and you want to
+ make StatRep available to all users, see more detailed information
+ about how to install LaTeX packages at:
+ \url{http://www.tex.ac.uk/cgi-bin/texfaq2html?label=what-TDS}
+
+ Determine the location that LaTeX uses to load packages. At a
+ command-line prompt, enter the following command:\\
+ \texttt{kpsewhich -var-value=TEXMFHOME}
+
+ The command returns the root directory name in which LaTeX can
+ find your personally installed packages.
+
+ In the following instructions, this directory is referred to as the
+ "root directory".
+
+ \item
+ Create the directory if it does not exist, and create the additional
+ subdirectories \Code{tex/latex/statrep}.
+ Your directory tree will have the following structure:
+\begin{verbatim}
+ ---------------
+ root directory/
+ tex/
+ latex/
+ statrep/
+\end{verbatim}
+ \item
+ Copy the files \Code{statrep.dtx}, \Code{statrep.ins}, \Code{statrepmanual.pdf},
+ and \Code{statrepmanual.tex} to
+ the \Code{statrep} subdirectory. Your directory tree will have the following structure:
+\begin{verbatim}
+ ---------------
+ root directory/
+ tex/
+ latex/
+ statrep/
+ statrep.dtx
+ statrep.ins
+ statrepmanual.pdf
+ statrepmanual.tex
+ ---------------
+\end{verbatim}
+ \item
+ Change to the \Code{statrep} directory and enter the following command:\\
+ \texttt{pdftex statrep.ins}
+
+ The command creates several files, one of which is the configuration
+ file, \Code{statrep.cfg}.
+
+ \textbf{Mik\TeX\ users}:
+ Add the root directory name from Step 2a according to these instructions
+ for installing packages for MikTeX
+ (\textit{Register a user-managed TEXMF directory}):
+ \url{http://docs.miktex.org/manual/localadditions.html}
+
+\end{enumerate}
+
+\section{Step 3: Tell the StatRep Package the Location of the StatRep SAS Macros}
+
+ Edit the \Code{statrep.cfg} file that was generated in Step 2d so that the macro
+ \cs{SRmacropath} contains
+ the correct location of the macro file from step 1. For example, if
+ you copied the \Code{statrep\_macros.sas} file to a directory named
+ \Code{C:\textbackslash{}mymacros},
+ then you define macro \cs{SRmacropath} as follows:
+ \begin{verbatim}
+ \def\SRmacropath{c:/mymacros/statrep_macros.sas}
+ \end{verbatim}
+
+ Use the forward slash
+ as the directory name delimiter instead of the backslash, which is a special
+ character in LaTeX.
+
+ You can now test and experiment with the package. Create a working
+ directory, and copy the file \Code{quickstart.tex} into it.
+
+ To generate the quick-start document:
+\begin{enumerate}
+\item Compile the document with pdf\LaTeX. You can use a \LaTeX-aware
+ editor such as \TeX works, or use the command-line command \Code{pdflatex}.
+ This step generates the SAS program that is needed to produce the results.
+
+\item Execute the SAS program quickstart\_SR.sas, which was automatically
+ created in the preceding step. This step generates the SAS
+ results that are requested in the quick-start document.
+
+
+\item Recompile the document with pdf\LaTeX. This step compiles the
+ quick-start document to PDF, this time including the SAS results
+ that were generated in the preceding step.
+
+ In some cases listing outputs may not be framed properly after this step.
+ If your listing outputs are not framed properly, repeat this step so that
+ LaTeX can remeasure the listing outputs.
+
+\end{enumerate}
+ You can make changes to the file with a \LaTeX-aware editor
+ or with any plain-text editor such as \textsf{NotePad} or \textsf{emacs}.
+
+If you ever want to uninstall the \StatRep package,
+delete the \Code{statrep} directory that you created
+in the installation step 2d and remove the SAS macro file \Code{statrep\_macros.sas}
+that you copied in installation step 1.
+ Mik\TeX\ users must additionally update the filename database.\\
+ \Code{(MikTeX Options dialog: General-> Refresh FNDB)}
+
+\chapter{The \texttt{longfigure} Package}\label{longfigure}\index{longfigure package}
+
+
+ The \Code{longfigure} package uses and relabels components of the
+ well-known \Code{longtable} package, written by David Carlisle, to
+ provide a table-like environment that can display a stream
+ of subfigures as a single figure that can break across pages.
+
+ The \Code{longtable} package defines a \Code{longtable} environment,
+ which produces tables that can be broken by \TeX's standard page-breaking algorithm.
+ Similarly, the \Code{longfigure} package defines a \Code{longfigure} environment, which produces
+ figures that can be broken by \TeX's standard page-breaking algorithm.
+ The internal structure of a long figure is similar to a long table.
+ Rows might contain (for example) tables or graphics. Page breaks
+ can occur only between rows.
+
+ The \Code{longfigure} package differs from the \Code{longtable} package in the following ways:
+ \begin{itemize}
+ \item The \Code{longfigure} package supports two additional key-value options:
+ \begin{itemize}
+ \item The \Code{figname=} option specifies the counter for numbering
+ \Code{longfigure} environments.
+ You can specify any string; the default is \Code{figure}.
+ When you specify a \Code{figname=} value for which no counter already exists, the
+ \Code{longfigure} package loads the \Code{tocloft} package and creates the counter.
+ \index{figname option}
+
+ \item The \Code{resetby=} option specifies a counter (for example,
+ \Code{resetby=chapter}) such
+ that output numbering is reset each time the counter value changes.
+ If a counter is specified that does not exist, the \Code{tocloft} package is
+ loaded to create the new counter.
+ \index{tocloft package}%
+ For information about how the lists are typeset,
+ \index{list of outputs, creating}%
+ see the \Code{tocloft} package documentation.
+ \end{itemize}
+ \item The counters and macros that start with \cs{LT} in the \Code{longtable} package
+ are renamed to start with \cs{LF} in the \Code{longfigure} pacakge to avoid
+ namespace conflicts when the two packages are used together.
+ The generic macros that are defined in the \Code{longtable} package
+ (\cs{endfirsthead}, \cs{endhead}, \cs{endfoot}, and \cs{endlastfoot}) are
+ also renamed with \cs{LF} as a prefix in the \Code{longfigure} package.
+
+ \item The \cs{LF@name} macro is based on the \cs{fnum@table} macro from
+ the \Code{longtable} package. The \cs{LF@name} macro returns the capitalized
+ counter name and value. For example, if the counter is \Code{figure} and the
+ macro is processing the second \Code{longfigure}, the \cs{LF@name} macro
+ would contain the value ``Figure 2.''
+
+ \end{itemize}
+ You can use the \Code{longfigure} package defaults to produce a \emph{List of Figures}
+ by inserting the following tag in your document at the point where you want
+ the list to appear:
+
+\begin{verbatim}
+ \listoffigures
+\end{verbatim}
+
+
+ The default counter used to display figures is the \Code{figure} counter,
+ but you can specify a different counter. For example, if you want your
+ figures to be labeled as ``Display,'' specify \Code{figname=display} when you
+ load the \Code{longfigure} package; to display a \emph{List of Displays}, insert the following
+ command in your document at the point where you want the list to appear:
+
+\begin{verbatim}
+ \listofdisplay
+\end{verbatim}
+
+ \textbf{Note:} If you specify a counter that does not exist,
+ an auxiliary file with extension \Code{.lft} is created to contain the information
+ needed to create the list.
+
+ If you want to use more advanced features of the \Code{tocloft} package,
+ load it before you load the \Code{longfigure} package so that the \Code{longfigure}
+ package sees that the counters specified by the \Code{figname=} and \Code{resetby=}
+ options are already defined and does not attempt to create them.
+
+
+\section{Example}
+ The following lines produce a single figure that contains three images and
+ one tabular environment. Each element is a row of the \Code{longfigure} environment.
+ Page breaks can occur between rows.
+
+\begin{verbatim}
+\documentclass{book}
+\usepackage{graphicx}
+\usepackage{longfigure}
+
+\begin{document}
+ \begin{longfigure}{c}
+ \caption{My Long Figure}\label{mlfig}\\
+ \includegraphics[width=3in]{myfig1}\\
+ \includegraphics[width=3in]{myfig2}\\
+ \includegraphics[width=3in]{myfig3}\\
+ \begin{tabular}{ll}
+ one & two \\
+ three & four\\
+ \end{tabular}
+ \end{longfigure}
+\end{document}
+\end{verbatim}
+
+ In this example, the \Code{\{c\}} argument in the \cs{begin\{longfigure\}} command
+ specifies only a single centered column. You can also specify multiple columns and,
+ if needed, use the \cs{multicolumn} command for more flexibility.
+%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%
+
+\chapter{The ODS \StatRep LaTeX Tagset}\label{latexoutput}
+\index{ODS LaTeX output}\index{LaTeX output}
+The \StatRep package provides limited support for
+SAS-generated LaTeX output\footnote{Since SAS 9.1, SAS\textsuperscript{\textregistered}
+has provided an experimental LaTeX tagset.\index{statrep tagset}
+The \texttt{statrep} tagset is a simplified version of that experimental tagset.}.
+
+Three corresponding configuration variables are available. You can change them
+in the file \texttt{statrep.cfg} or in your LaTeX document.
+For complete details about the configuration file, see
+the section \ref{custom}.
+
+The variables are as follows:
+
+\begin{itemize}
+\item \cs{SRdefaultdests} specifies the type of ODS output to generate.
+The default is \texttt{listing}, which corresponds to the ODS Listing destination.
+\item \cs{SRlatexstyle} specifies the ODS style for SAS-generated LaTeX tables.
+The default is \texttt{statrep}, which is a monochromatic style based on the
+SAS ODS LaTeX tagset.
+\item \cs{SRlatexdir} specifies the name of the subdirectory into which
+SAS writes the LaTeX output files.
+The default is \texttt{tex}.
+\end{itemize}
+
+To enable the use of LaTeX output in \StatRep, follow these steps.
+\begin{enumerate}
+
+\item Change your \StatRep configuration or in your LaTeX document.
+The \cs{SRdefaultdests} setting
+selects the default output type; it can have the value \texttt{latex}
+or \texttt{listing}. The default value is \texttt{listing}.
+You can change the value in the \texttt{statrep.cfg} configuration file as follows:
+
+\begin{verbatim}
+ \def\SRdefaultdests{latex}
+\end{verbatim}
+
+Alternatively, you can change the value in your LaTeX document
+after the \StatRep package is loaded and before your document begins:
+
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage{statrep}
+ \def\SRdefaultdests{latex}
+ \begin{document}
+\end{verbatim}
+
+\item Run the included SAS program \Code{statrep\_tagsets.sas}\index{statrep tagset}
+before you generate the SAS output for your document. This program creates
+a \texttt{statrep} tagset and a \texttt{statrep} ODS style.
+When you run the program to generate the output for your document,
+SAS must be able to find the \texttt{statrep} tagset in order to produce LaTeX
+tabular output that is compatible with the \StatRep package.
+
+For details on installing and storing tagsets see this SAS\textsuperscript{\textregistered} Note:
+\url{http://support.sas.com/kb/32/394.html}
+
+\end{enumerate}
+
+\section{How It Works}
+
+When you first compile your document with \texttt{pdflatex}, the SAS
+program to produce the requested outputs is generated.
+
+When you run the program, SAS checks the type of output requested,
+which is controlled with the \cs{SRdefaultdests} setting.
+If the output type is \texttt{latex},
+LaTeX output is written to a subdirectory named \texttt{tex}.
+If the output type is \texttt{listing},
+ODS Listing output is written to a subdirectory named \texttt{lst}.
+
+
+When you recompile your document with \texttt{pdflatex}, the
+\cs{Listing} tag displays the requested output objects,
+insuring that your outputs are displayed properly with automatic page breaking.
+
+\section{Customization}
+
+\begin{description}
+\item[ODS Style] You can specify an ODS style for your LaTeX output with the \cs{SRlatexstyle}
+setting. The default is \texttt{statrep}, a monochrome style that is generated by the
+SAS program \Code{statrep\_tagsets.sas}.\index{statrep tagset}
+Examples of different styles are provided in the section \titleref{styleexamples}.
+
+If you specify an ODS style that uses color, specify the \texttt{color} option
+when you load the \StatRep package.
+
+\begin{verbatim}
+\documentclass{article}
+\usepackage[color]{statrep}
+\end{verbatim}
+
+The style setting for LaTeX tables cannot be changed within a document.
+That is, you cannot mix ODS LaTeX styles within a document.\index{mixing LaTeX styles}
+If you change the style within your document, the last
+style specified is used for all LaTeX outputs.
+
+\item[Mixing Output Types] You can mix output types with the \texttt{dest=}
+option on the \cs{Listing} tag.\index{mixing output types}
+The option overrides the global \cs{SRdefaultdests} setting.
+
+For example, if your \cs{SRdefaultdests} is set to \texttt{latex}, you can
+specify that a particular \cs{Listing} output to be in listing format by
+specifying \texttt{dest=listing} in the \cs{Listing} tag options, as follows:
+
+\begin{verbatim}
+\Listing[store=mydoc, dest=listing, caption={Results}]{outa}
+\end{verbatim}
+
+\item[Output Directory Name] You can change the name of the directory into which
+SAS writes the outputs with the \cs{SRlatexdir} variable. The default
+subdirectory name is \Code{tex}.
+
+\end{description}
+
+\section{Caution}
+
+In some cases the LaTeX tagset produces tables that are too wide
+to fit in the text block. In some cases, you can shift the table to
+the left so the table will fit on the page. You can shift the table
+with the \cs{LFleft} command.
+
+The following example moves the left margin of the
+output 1 inch to the left of its normal location
+(the start of the text block).
+The output is then typeset and the margin is set back to its default value of 0.
+
+\begin{verbatim}
+ \LFleft=-1in
+ \Listing[store=mydoc, caption={Results}]{outa}
+ \LFleft=0in
+\end{verbatim}
+
+In some cases, the table will not fit on the page at all.
+The only solution in those cases is to change back to the
+\texttt{listing} output destination, modifying the fontsize and linesize
+as needed.
+
+Some ODS styles may not work with the LaTeX tagset. For example,
+some styles specify fonts that are available to SAS but not to LaTeX.
+
+\section{Style Examples}\label{styleexamples}
+
+\begin{figure}[H]
+\caption{Listing Output}
+\includegraphics{images/listing}
+\end{figure}
+\begin{figure}[H]
+\caption{LaTeX Output, default style}
+\includegraphics{images/default}
+\end{figure}
+\begin{figure}[H]
+\caption{LaTeX Output, \texttt{statistical} style}
+\includegraphics{images/statistical}
+\end{figure}
+\begin{figure}[H]
+\caption{LaTeX Output, \texttt{journal} style}
+\includegraphics{images/journal}
+\end{figure}
+\begin{figure}[H]
+\caption{LaTeX Output, \texttt{htmlblue} style}
+\includegraphics{images/htmlblue}
+\end{figure}
+
+
+\chapter{\StatRep with SAS Studio or SAS University Edition}\label{sasstudio}
+\index{SAS Studio}\index{University Edition}\index{SAS University Edition}
+\index{web interface}
+
+You can use \StatRep with the SAS Studio web-based interface and SAS University Edition.
+You can find more information on these applications here:
+\begin{description}
+\item[SAS Studio] is a web application for SAS that you access through your web browser.
+\url{http://support.sas.com/software/products/sasstudio/}
+
+\item[SAS University Edition]
+is free and includes the SAS products Base SAS, SAS/STAT, SAS/IML, SAS/ACCESS Interface to PC Files, and SAS Studio.
+\url{http://support.sas.com/software/products/university-edition/index.html}
+\end{description}
+
+With a web interface, there is no concept of a \emph{current directory},
+so you must let SAS know where your files are located.
+In order to use \StatRep, SAS needs to know the following locations:
+
+\begin{itemize}
+\item the directory that contains your LaTeX file.
+\item the full path to the file \texttt{statrep\_macros.sas}.
+\item the location of the \StatRep ODS tagset, if you prefer LaTeX output (instead of Listing output).
+See the previous chapter for details on how to create and use this tagset.
+\end{itemize}
+
+With SAS University Edition, you run a virtual machine on your local computer so you can
+create a shared folder that SAS can access.\index{virtual machine}
+For SAS Studio folder locations, see the following section for details.
+
+\section{SAS Studio Folders}
+\index{SAS Studio}
+Other than SAS University Edition, there are three 3 types of installations for SAS Studio:
+\begin{itemize}
+\item SAS Studio Single User
+\item SAS Studio Basic (Windows or UNIX)
+\item SAS Studio Mid-Tier (Enterprise Edition)
+\end{itemize}
+
+For Single User, \textit{My Folders} is your home directory on your local machine and the folders list will also include folders for your desktop, documents folder, and mapped drives.
+
+For both Enterprise and Basic edition, the path for \textit{My Folders} is the home directory on the remote SAS server. That is, the file system in the \textit{Folders} accordion is not your local machine;
+it is the location of the remote server.
+
+On Windows, you can add a \textit{Folder Shortcut} back to your local computer.
+The shortcut must be accessible by the remote server.
+On UNIX, you can add a \textit{Folder Shortcut} to your home directory.
+
+You may need to ask your local SAS administrator about how to create a folder shortcut to your local
+files.
+
+\section{SAS University Edition: Creating a Shared Folder}
+\index{University Edition}\index{SAS University Edition}\index{virtual machine}
+Suppose you have a directory called \texttt{mydocs} that contains your LaTeX file.
+You create a shared folder in the virtual machine as shown in the following screenshot:
+
+\includegraphics[width=\textwidth]{images/vm1}
+
+When you select \texttt{Shared Folders} and click to add a new path,
+enter the information (path and name) as shown in the following screenshot:
+
+\includegraphics[width=\textwidth]{images/vm2}
+
+The \texttt{Folder Path} is the absolute path to the directory and the
+folder name is the last part of that path.
+The name is a short-hand name that is used later in your code.
+Make sure to select \texttt{Auto-mount} if you want to use the folder in later SAS sessions (as you probably will).
+The result of entering the information is shown in the following screenshot.
+
+\includegraphics[width=\textwidth]{images/vm3}
+
+When you start SAS Studio, the \texttt{Folder} panel shows your new shared folder as a \emph{Folder Shortcut}.
+SAS will know this folder by the full name \texttt{/folders/myshortcuts/mydocs},
+which means you can use that name to assign filerefs and libnames as you normally would in any SAS program.
+
+Notice the \texttt{Folder} panel in the following screenshot.
+You can disregard most of the code in the program editor window,
+but do notice the first line that references the new shared folder.
+
+\includegraphics[width=\textwidth]{images/sasuniv1}
+
+The LIBNAME statement in the code window assigns the \texttt{mytempl} libref to your shared folder.
+
+\section{The Bridge Between LaTeX and SAS}
+
+Now you have your working directory and SAS knows that there is such a location.
+The final step is to define a bridge between your LaTeX document and SAS.
+
+You connect the two by defining a LaTeX tag called \verb+\SRrootdir+, which contains the
+path to your shared folder as displayed in the following LaTeX code:
+
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage[margin=1in]{geometry}
+ \usepackage[color]{statrep}
+ \def\SRrootdir{/folders/myshortcuts/mydocs}
+ \def\SRmacropath{/folders/myshortcuts/mydocs/statrep_macros.sas}
+ \begin{document}
+\end{verbatim}
+
+This document preamble performs the following:
+\begin{itemize}
+\item Specifies that the document use the \texttt{article} class.
+\item Loads the \texttt{geometry} package and specifies 1 inch margins on all sides.
+\item Loads the \texttt{statrep} package and specifies that outputs can include color.
+\item Defines the \verb+\SRrootdir+ path (the path to the working directory) as the shared folder you created in the previous steps.
+\item Defines the \verb+\SRmacropath+ that contains the full path and file name of the \texttt{statrep\_macros.sas} file
+that is part of the \StatRep package.
+This example shows that it is in the same directory as the LaTeX file, but you can put the macros anywhere you like,
+as long as SAS can find the file (that is, as long as the macros are in a shared folder)
+\end{itemize}
+
+With this preamble, you can start writing your content; when \StatRep automatically generates the SAS program to create your output,
+the paths you have defined here are used so SAS can find the macros it needs and so it can write the requested outputs to your working directory.
+
+From this point on, you use \StatRep just as you would normally.
+
+
+\printindex
+\end{document} \ No newline at end of file