c# pdf viewer wpf : How to move pages around in pdf file application software tool html winforms web page online v19i081-part459

Journal of Statistical Software
11
R> table(chickwts$feed)
casein horsebean
linseed meatmeal
soybean sunflower
12
10
12
11
14
12
R> write.table(chickwts, file = "chickwts.txt", row.names = FALSE,
+
quote = FALSE)
SAS> data sasuser.chickwts;
SAS>
infile "chickwts.txt" firstobs = 2;
SAS>
input weight feed $;
SAS> proc freq data=sasuser.chickwts;
SAS>
table feed;
The FREQ Procedure
Cumulative
Cumulative
feed
Frequency
Percent
Frequency
Percent
-------------------------------------------------------------
casein
12
16.90
12
16.90
horsebea
10
14.08
22
30.99
linseed
12
16.90
34
47.89
meatmeal
11
15.49
45
63.38
soybean
14
19.72
59
83.10
sunflowe
12
16.90
71
100.00
2
Figure 3: Results from code in Subsection4.2
SAS, and summarized there as well. In this example, it is very important that the R code be
run first, as it creates the data needed by SAS; hence the filename extension used is .RSAStex.
By default, SAS statements are formatted in \small font. Font sizing is not provided among
the options in Sweave, so we do it manually. The results of running sasweave on the code
below are displayed in Figure3.
{\small
\begin{Scode}
table(chickwts$feed)
write.table(chickwts, file="chickwts.txt", row.names=FALSE, quote=FALSE)
\end{Scode}
}
\begin{SAScode}
data sasuser.chickwts;
infile "chickwts.txt" firstobs = 2;
input weight feed $;
proc freq data=sasuser.chickwts;
table feed;
\end{SAScode}
How to move pages around in pdf file - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
how to move pages around in a pdf document; change page order in pdf online
How to move pages around in pdf file - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
pdf reorder pages online; move pages in pdf
12
SASweave: Literate Programming Using SAS
4.3. Multiple figures in a float
The following code segment illustrates the use of several options. First, we suppress the
code listing (echo=FALSE). We ask for two plots (fig=2) of reduced width (width=.45).
Rather than the default placement of plots, we specify that that they be saved as L
A
T
E
X
macros (plotname=\chickPlot) for later inclusion in a figure environment. Subsequently,
the macros \chickPlotA and \chickPlotB call up the two plots. Figure4 shows the results
from the code below.
\begin{SAScode}{echo=FALSE, fig=2, width=.45, plotname=\chickPlot, &
outfmt = fontsize=\footnotesize}
proc glm data=sasuser.chickwts;
class feed;
model weight = feed / ss1;
output out=chickfit p=Predicted r=Residual;
means feed;
ods exclude NObs ClassLevels;
proc gplot data=chickfit;
plot weight * feed
Residual * Predicted;
\end{SAScode}
\renewcommand{\figurename}{Exhibit}
See Exhibit~\ref{chickfig} for some supplementary displays.
\begin{figure}
\caption{Plots of the \texttt{chickwts} data.}\label{chickfig}
\begin{center}
\begin{tabular}{ll}
Observed weights for each diet
& Residuals versus predicted \\
\chickPlotA
& \chickPlotB
\end{tabular}
\end{center}
\end{figure}
4.4. Separating code and output; hiding code
Sometimes we want to put the results in a separate place from the code listing; for example,
in a float. The best way to do this is to reuse the same code, via labels. This example
shows two code chunks. Chunk 1 contains the code we want to run; but it is only listed, not
evaluated (eval=FALSE). Code chunk 2 recalls chunk 1 using its default label of lastchunk,
and adds an ODS statement to restrict the output; this time it is executed, but the code listing
is suppressed (echo=FALSE). Figure5 displays what is produced by the code below.
VB.NET PDF - View PDF with WPF PDF Viewer for VB.NET
Page: Replace PDF Pages. Page: Move Page Position. Page: Copy, Paste PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Pan around the PDF document.
pdf reverse page order online; change page order pdf preview
C# WPF PDF Viewer SDK to view PDF document in C#.NET
Page: Replace PDF Pages. Page: Move Page Position. Page: Extract, Copy PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Pan around the PDF document
reorder pages in pdf online; move pages in pdf file
Journal of Statistical Software
13
Exhibit 1: Plots of the chickwts data.
Observed weights for each diet
Residuals versus predicted
weight
100
200
300
400
500
feed
casein horsebea linseed meatmeal soybeansunflowe
Residual
-200
-100
0
100
200
Predicted
160 180 200 220 240 260 280 300 320 340
The GLM Procedure
Dependent Variable: weight
Sum of
Source
DF
Squares
Mean Square
F Value
Pr > F
Model
5
231129.1621
46225.8324
15.36
<.0001
Error
65
195556.0210
3008.5542
Corrected Total
70
426685.1831
R-Square
Coeff Var
Root MSE
weight Mean
0.541685
20.99052
54.85029
261.3099
Source
DF
Type I SS
Mean Square
F Value
Pr > F
feed
5
231129.1621
46225.8324
15.36
<.0001
The GLM Procedure
Level of
------------weight-----------
feed
N
Mean
Std Dev
casein
12
323.583333
64.4338397
horsebea
10
160.200000
38.6258405
linseed
12
218.750000
52.2356983
meatmeal
11
276.909091
64.9006233
soybean
14
246.428571
54.1290684
sunflowe
12
328.916667
48.8363842
See Exhibit 1 for some supplementary displays.
3
Figure 4: Results from code in Subsection4.3
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Page: Replace PDF Pages. Page: Move Page Position. Page: Extract, Copy and Users can view PDF document in single page or continue pages. Pan around the document.
change pdf page order; reordering pages in pdf
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Page: Replace PDF Pages. Page: Move Page Position. Page: Copy, Paste PDF Users can view PDF document in single page or continue pages. Pan around the document.
change pdf page order reader; rearrange pdf pages reader
14
SASweave: Literate Programming Using SAS
Here is the SAS code to perform a robust analysis of the chick-weights data.
The output is displayed in Exhibit~\ref{robust-out}.
% Chunk 1
\begin{SAScode}{prompt=, eval=FALSE}
proc robustreg data = sasuser.chickwts method = M (wf = bisquare);
class feed;
model weight = feed;
Feed_overall: test feed;
\end{SAScode}
\begin{figure}
\caption{Results of \texttt{PROC ROBUSTREG}.}\label{robust-out}
% Chunk 2
\begin{SAScode}{echo=FALSE}
\SAScoderef{lastchunk}
ODS select ParameterEstimates TestsProfile;
\end{SAScode}
\end{figure}
4.5. Argument substitution; hiding code
In this example, we set up (but do not evaluate or echo) a code chunk named import; it
contains the strings #1, #2, and #3, which serve as placeholders for arguments to be supplied
later. In the second code chunk, we read a data file and run PROC REG; the file-reading part
is done by re-using the import chunk with appropriate arguments supplied. That part of the
code is not displayed in the listing, however, because showrefs is FALSE by default.
\SASweaveOpts{eval=FALSE} %%% suppress all evaluation for this example
\begin{SAScode}{echo=FALSE, eval=FALSE, label=import}
proc import
datafile = "#1"
out = #2
dbms = #3
replace ;
\end{SAScode}
%
% Secretly read-in a file before an analysis ...
\begin{SAScode}{fig=2}
\SAScoderef{import}{c:\BPSdata\ta05-03.dat}{reactTime}{TAB}
proc reg data=reactTime;
model Time = Distance;
plot Time*Distance Residual.*Predicted.;
\end{SAScode}
Journal of Statistical Software
15
Exhibit 2: Results of PROC ROBUSTREG.
The ROBUSTREG Procedure
Parameter Estimates
Standard
95% Confidence
Chi-
Parameter
DF Estimate
Error
Limits
Square Pr > ChiSq
Intercept
1 329.0835 16.8600 296.0384 362.1286 380.97
<.0001
feed
casein
1 -0.0836 23.8437 -46.8163 46.6492
0.00
0.9972
feed
horsebea 1 -169.863 25.0075 -218.877 -120.850
46.14
<.0001
feed
linseed
1 -110.343 23.8437 -157.076 -63.6106
21.42
<.0001
feed
meatmeal 1 -49.5349 24.3796 -97.3180 -1.7518
4.13
0.0422
feed
soybean
1 -82.8402 22.9764 -127.873 -37.8074
13.00
0.0003
feed
sunflowe 0
0.0000
.
.
.
.
.
Scale
1 52.5603
Robust Linear Tests
FEED_OVERALL
Test
Chi-
Test
Statistic
Lambda DF Square Pr > ChiSq
Rho
12.4552
0.7977 5
15.61
0.0080
Rn2
71.1819
5
71.18
<.0001
Here isthe SAS code to perform arobust analysis of the chick-weightsdata.
The output is displayed in Exhibit 2.
proc robustreg data = sasuser.chickwts method = M (wf = bisquare);
class feed;
model weight = feed;
Feed_overall: test feed;
4
Figure 5: Results from code in Subsection4.4
SAS> proc reg data=reactTime;
SAS>
model Time = Distance;
SAS>
plot Time*Distance Residual.*Predicted.;
Note that import is effectively a macro for SASweave; and we can actually trick SASweave
into defining new macros based on it. The first code chunk below simply calls up import and
substitutes appropriate arguments so that it becomes a simplified SASweave macro suitable
for importing comma-delimited files. It is then used and displayed.
16
SASweave: Literate Programming Using SAS
% Create a new "macro"
\begin{SAScode}{echo=FALSE, eval=FALSE, label=importCSV}
\SAScoderef{import}{#1.csv}{#1}{CSV}
\end{SAScode}
% Test run...
\begin{SAScode}{showref}
\SAScoderef{importCSV}{newFile}
\end{SAScode}
SAS> proc import
SAS>
datafile = "newFile.csv"
SAS>
out = newFile
SAS>
dbms = CSV
SAS>
replace ;
5. Implementation
This section gives an overview of how the SASweave software is structured, and a description
of the main tasks of each body of code.
The basic approach in this SASweave implementation is rather brute-force in nature: a single
SAS program is created that contains everything needed for the final .tex file—both code
and text chunks. The text chunks and code listings are simply inserted in the right places
in the SAS output. The output file is then post-processed and saved as a .tex file, which,
optionally, is passed to pdflatex to produce a .pdf file with the formatted document.
For the verbatim listing of code andoutput, we provide aLAT
E
Xpackage named SasWeave.sty
that defines verbatim-like environments SASinput and SASoutput; these are based on the
standard LAT
E
Xpackage fancyvrb. SasWeave.sty is similar to the package Sweave.sty that
is part of Sweave. (Originally, it was named SASweave.sty, but this had the effect of tricking
Sweave into thinking that Sweave.sty was already loaded.)
The pre- and post-sas operations are done as much as possible by means of AWK scripts.
AWK is an ideal scripting language for this purpose, because its design focuses on pattern-
matching, and there is an implied loop where we go through a file line-by-line. That is exactly
what is needed here. Moreover, AWK is quite forgiving (we leave error-checking to sas and
L
A
T
E
X), and an implementation of AWK is available for virtually any platform.
The main workhorse among the AWK scripts is the one named saswv1.awk (henceforth called
just saswv1), which reads the source file and writes the .sas file. This script looks for
five main conditions: lines that start with “\begin{SASweaveOpts},” “\begin{SAScode},”
and “\end{SAScode}”, and processing of cases where a flag named sas is zero (meaning the
current source-file line is in a text chunk) or 1 (it is in a code chunk). By doing appropriate
things in response to these five conditions, the script arranges things so that if we are weaving
the source file, the output .sas file will be organized as follows (and in the order described).
1. Text chunks go into put statements within PROC IML. (This includes inserting judicious
linefeeds to keep these statements from exceeding the line-width limit. For this reason,
Journal of Statistical Software
17
SASweave must control SAS’s LS option.)
2. If code is to be echoed, the appropriate verbatim environment SASinput is set up and
included at the end of the preceding text chunk.
3. If output is to be displayed, a \begin{SASoutput} statement is added tothe text chunk.
4. Appropriate setup code is added to the SAS program. These include setting up the
desired line size at ls, and if a figure is to be saved, some goptions statements to setup
an output .pdf file.
5. The SAS code itself is added to the SAS program.
6. At the endof acodechunk,PROC IML is started(if necessary),andthe string\end{SASoutput}
is added before the subsequent text chunk. (The script monitors whether PROC IML is
invoked in a code chunk and is still active; if so, IML is not restarted. This monitoring
allows one to break-up IML code into multiple chunks, if desired.)
7. If there are any figures, the needed \includegraphics statements are generated. If
there is no plotname, these are added to the text chunk; otherwise, they are wrapped
in L
A
T
E
Xmacro definitions before adding them to the text chunk.
8. We are now ready for more text from the source file (step 1).
(One can see exactly how the .sas file is structured by weaving a file with the -l option.)
The saswv1 script also contains some startup and ending code and a few functions to ease
in processing options. It also calls other functions defined in a different AWK script that is
loaded at the same time. These externally-supplied functions determine the actions taken at
the beginning of the run, at the beginning and end of a text chunk, setting up a graph, and
outputtingthe lines of a text chunk. There are two versions of these functions. The ones in the
file saswsetup.awk are used for weaving the source file (for eventual creation of a .tex file).
The alternative functions in sastsetup.awk are suitable for tangling. The sastsetup.awk
function for outputting text chunks does nothing at all, and the others there do very little
(for example, graphics are set up with the dimensions specified in the SASweave options, but
they go to the default device rather than a .pdf file). The design decision to provide different
output routines for tangling and weaving, while keeping the same basic saswv1 script, helps
with maintainability and consistency; a change made to saswv1.awk will appropriately affect
both tangling and weaving operations.
In sasweave, the script saswv2.awk handles post-processing of the .lst file generated by
sas, and creates a .tex file. This script is shorter and simpler than saswv1, but there are
more patterns that need handling. What complexity exists there is due to looking for empty
SASinput and SASoutput environments so that they are not added to the .tex file. Beyond
that, the main operations are stripping off the top two lines of each page, outputting only one
blank line whenever two consecutive blank lines are encountered (when squeeze is true), and
diverting chunks to other files when split is true. Communication of information for split
and squeeze options is done by checking for certain signal lines that saswv1 outputs.
The same maintainability and portability considerations as described for saswv1 motivate
the design of the command-line interface. For each operating system, we need a shell script
that serves as a front end to the AWK scripts. The unix/linux shell scripts sastangle and
18
SASweave: Literate Programming Using SAS
sasweave, and the Windows scripts sastangle.bat and sasweave.bat, are all as minimal as
possible. They simply identify and change to the directory where the source file resides, and
then call one of the AWK scripts saswmain.awk (for weaving) or sastmain.awk (for tangling).
These two scripts parse the command line for flags and determine the source file’s extension.
Based on the extension and flags, the source file or one of its derivatives is passed to saswv1,
sas, saswv2, Sweave, and pdflatex as is appropriate and in the correct sequence. The scripts
call the AWK system function with appropriate arguments to invoke a shell and run sas, R,
and pdflatex as needed.
Acertain amount of file copying and renaming takes place when both R and SAS code needs
processing. For example, with a .RSAStex source file, we first copy it to another file with
an extension of .Rtex, then run Sweave; the resulting .tex file is renamed with a .SAStex
extension before passing it to SASweave. This management is also done using the system
function.
Thesaswmain and sastmain scripts eachrequire acommonscript named saswcfg.awk,which
defines certain variables with system-specific values. This configuration file gives the path
where the AWK scripts are installed, and the commands to run sas, R, pdflatex, Stangle,
and Sweave. The Windows installer for SASweave creates this file. The one for unix/linux is
simply copied and edited, but typically only the AWK-script path needs modification.
6. Discussion
SASweave provides a simple and reliable way of presenting and documenting SAS analyses.
We have used it to great benefit in consulting, research and teaching. In research and con-
sulting, one or more SASweave source files provide a useful foundation for preparing analyses,
simulation studies, etc. One can document the methods used and the associated SAS code;
then, when the source file is processed, there is a reliable record of exactly what was done,
along with the results.
In teaching how to use SAS, SASweave streamlines the preparation of class handouts. Also,
if “live” SAS analyses are done in class, it is an easy matter for the instructor to save the
.sas file, add SAScode environments and possibly comments, and use sasweave to make a
documented form of the class examples with output included.
We have tried to make SASweave behave similarly to Sweave where that is appropriate and
practical. One notable difference between the two arises from the fact that Sweave uses R to
parse the input statements and simulate an interactive mode, while SASweave does not. One
code chunk in Sweave might produce several sets of code listings interspersed with output
listings. In SASweave, one code chunk always produces one code listing, followed by one
output listing containing all the results. Other Sweave features not present in SASweave at
this time include non-availability of PostScript graphs, no equivalent to Sweave’s \Sexpr{}
capability for incorporating computedresults in a text chunk, andno support for the emerging
“ODS graphics” provisions in certain SAS procedures.
However, SASweave does offer some nice extensions (we think) of Sweave. The main ones
include control of formatting, support for multiple figures in one code chunk, the provision
to assign macro names to plots, argument substitution. Those go on our wish list for future
releases of Sweave. Future development contemplated for SASweave includes extending the
same capability to Open Document Format files (used by OpenOffice), similar to the way
Journal of Statistical Software
19
odfWeave (KuhnandCoulter2007) extends Sweave.
Acknowledgments
The authors wish to thank two referees, as well as both editors. Their careful reading, helpful
comments, and suggestions have greatly improved the article.
References
Højsgaard S (2006). “SASRweave: An R Package for Literate Programming with SAS and
Rat the Same Time.” Accessed 2006-10-30, URLhttp://genetics.agrsci.dk/~sorenh/
misc/software/.
Knuth DE (1992). “Literate Programming.” CSLI Lecture Notes 27, Center for the Study of
Language and Information, Stanford, California.
Kuhn M, Coulter N (2007). The odfWeave Package. R package version 0.4.9, URLhttp:
//CRAN.R-project.org/.
Leisch F (2002).“Dynamic Generation of StatisticalReports Using Literate Data Analysis.”In
WH
¨
ardle, B R
¨
onz (eds.), “COMPSTAT 2002—Proceedings in Computational Statistics,”
pp. 575–580. Physika Verlag, Heidelberg, Germany. ISBN 3-7908-1517-9.
RDevelopment Core Team (2006). R: A Language and Environment for Statistical Computing.
RFoundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URLhttp:
//www.R-project.org/.
SAS Institute Inc (2003). SAS/STAT Software, Version 9.1. Cary, NC. URLhttp://www.
sas.com/.
Van Zandt T (1998). “The fancyvrb Package: Fancy Verbatims in L
A
T
E
X.” L
A
T
E
Xpackage
version 2.6, URLhttp://www.CTAN.org/.
Affiliation:
Russell V. Lenth
Department of Statistics and Actuarial Science
The University of Iowa
Iowa City, Iowa 52242, United States of America
E-mail: russell-lenth@uiowa.edu
URL:http://www.stat.uiowa.edu/~rlenth/
20
SASweave: Literate Programming Using SAS
Søren Højsgaard
University of Aarhus
Faculty of Agricultural Sciences
Research Centre Foulum
Institute of Genetics and Biotechnology
Blichers All´e 20, P.O. Box 50
8830 Tjele, Denmark
E-mail: Soren.Hojsgaard@agrsci.dk
URL:http://www.agrsci.dk/
Journal of Statistical Software
http://www.jstatsoft.org/
published by the American Statistical Association
http://www.amstat.org/
Volume 19, Issue 8
Submitted: 2007-02-14
June 2007
Accepted: 2007-05-27
Documents you may be interested
Documents you may be interested