display pdf in mvc : Rotate pdf pages and save Library application component .net azure windows mvc 247-20120-part416

Paper 247-2012 
Moving Data and Results Between SAS® and Microsoft Excel  
Harry Droogendyk, Stratia Consulting Inc., Lynden, ON, Canada 
ABSTRACT  
Microsoft Excel spreadsheets are often the format of choice for our users, both when supplying data to our processes 
and as a preferred means for receiving processing results and data. SAS® offers a number of means to import Excel 
data quickly and efficiently. There are equally flexible methods to move data and results from SAS to Excel. This 
paper will outline the many techniques available and identify useful tips for moving data and results between SAS and 
Excel efficiently and painlessly. 
INTRODUCTION  
The SAS system generally provides multiple solutions to most data manipulation challenges.  The task of moving 
data and results between SAS and Excel is no exception.  This paper will provide an overview and examples of each 
of the many methods and will outline the pros and cons of each choice.  Because SAS has such an impressive 
number of options available for interacting with Excel, this paper will only serve as an introduction to the available 
functionality, allowing further investigation by the reader to develop each method as required for their particular 
application. 
The various methods will be considered in turn, outlining the options available for moving from SAS 
Excel and vice 
versa.   The tabular summary at the end of the paper will be a helpful resource for the reader, laying out the 
advantages and license requirements for each method.  
TEXT DATA  
Raw text data can be consumed by both SAS and Excel.  Text data are often delimited, frequently by commas (CSV) 
or another character that is not expected to occur in the data, e.g. the tab character.  Import and export steps can be 
written using data step code, or the SAS IMPORT and EXPORT procedures can be utilized.   The ability to read and 
write raw text data has been a strength of Base SAS since its inception and is available to all SAS users.
proc export  data   
= sashelp.class 
outfile  
'c:\temp\class.txt' 
dbms    
= dlm  replace
delimiter  
'09'x
run
proc import  datafile  
'c:\temp\class.csv' 
out   
= class 
dbms    
= csv  replace; 
getnames 
= yes ; 
run 
Additional options can be specified when IMPORTing data.  By default SAS looks for column names in the first row of 
the data file, begins reading data in row two and looks at the first 20 rows of the input file to determine whether 
columns ought to be defined as character or numeric ( including date or time values ).  The default behavior can be 
modified using the GETNAMES, DATAROW and GUESSINGROWS parameters.  Note that while SAS can write 
delimited text files with an indeterminate number of rows and delimited fields, Excel will only consume rows until it 
reaches its version determined limit.  Excel 2007 and later files (.xlsb, .xlsx, or .xlsm file name suffixes  ) support 
16,384 columns and 1,048,576 rows in a worksheet.   Pre Excel 2007 files may contain a maximum of 256 columns 
and 65,536 rows.    
The log contents below show  that PROC EXPORT actually generated a data step behind the scenes to create the 
tab-delimited text file.     
126      data _null_; 
127      %let _EFIERR_ = 0; /* set the ERROR detection macro variable */ 
128      %let _EFIREC_ = 0;     /* clear export record count macro variable */ 
129      file 'c:\temp\class.txt' delimiter='09'x DSD DROPOVER lrecl=32767; 
130      if _n_ = 1 then        / write column names or labels */ 
131       do; 
132         put 
133            "Name" 
Programming: Foundations and Fundamentals
s
SAS Global Forum 2012
12
2
Rotate pdf pages and save - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
rotate a pdf page; pdf expert rotate page
Rotate pdf pages and save - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
how to rotate just one page in pdf; rotate single page in pdf reader
<snip> 
142         ; 
143       end; 
144     set  SASHELP.CLASS   end=EFIEOD; 
145         format Name $8. ; 
<snip> 
150       do; 
151         EFIOUT + 1; 
152         put Name $ @; 
<snip> 
157         ; 
158       end; 
159      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro 
variable */ 
160      if EFIEOD then call symputx('_EFIREC_',EFIOUT); 
161      run;
Is additional data processing required in addition to the import or export ?  As the log showed, 
SAS generated data step code behind the scenes to do the deed.    Create most of the customized data step required 
by first coding the import or export procedure, running the procedure, and grabbing the salient data step code out of 
the log, adding the required data manipulation logic.  Use the completed data step code in place of the SAS 
procedure. 
Not all text data is delimited.  Fixed width columnar text data can be created using data step code.  The resulting file 
can be consumed by Excel and converted to columns using the Text Import Wizard. 
filename fixed lrecl = 100 'c:\temp\class_fixed.txt'
data _null_
file fixed; 
set sashelp.class; 
put @1 name  @12 sex  @14 age 4.-L @19 height 5.1 @25 weight 5.1
run
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
doc.Save(outPutFilePath). How to VB.NET: Delete Consecutive Pages from PDF. This is a VB .NET example for how to delete a range of pages from a PDF document.
how to reverse page order in pdf; how to rotate all pages in pdf in preview
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
doc.DeletePage(2); // Save the file. doc.Save(outPutFilePath); Demo Code: How to Delete Consecutive Pages from PDF in C#.NET. How
pdf rotate one page; pdf save rotated pages
DYNAMIC DATA EXCHANGE ( DDE ) 
DDE was introduced in 1987 to allow one Windows program to communicate with another.  While DDE technology is 
ancient ( in terms of computer years ), it is still supported by current versions of Windows and SAS.  It remains a 
powerful tool for the adventurous SAS programmer who wishes to control Windows software, including Microsoft 
Excel.   Using DDE, the SAS user can interact with Excel to do the following: 
•  read and write data directly from / into specific Excel worksheet cells or a range of cells 
•  execute many native Excel commands, eg. 
 create, delete or rename worksheets  
 sort, format cells 
 save workbooks 
 execute Excel macros 
Excel must exist on the machine running the SAS program and the user must be able to execute system commands 
on that machine ( XCMD configuration option ) .  DDE allows SAS to control Excel almost as if a user with a keyboard 
was interacting with the spreadsheet.  While a DDE program is running, the user interface of the computer is 
effectively not available for use.   
There are some excellent SAS / DDE resources available so the example below is simply to whet the reader’s 
appetite.  The sample code is taken directly from the SAS Online Documentation
site. 
/* This code assumes that Excel is installed in the directory specified  */ 
options noxwait noxsync
x '"C:\Program Files\Microsoft Office\Office12\excel.exe"';   
/* Sleep for 15 seconds to give Excel time to start.       */ 
data _null_
x=sleep(15); 
run
/* DDE link is established using MS Excel SHEET1, rows 1-20 and columns 1-3  */ 
filename data dde 'excel|sheet1!r1c1:r20c3'
data one; 
file data; 
do i=1 to 20
x=ranuni(i); 
y=x+10
z=x/2
put x y z; 
end
run
/* Microsoft defines the DDE topic SYSTEM to enable commands to be invoked 
within Excel. */ 
filename cmds dde 'excel|system'
/* These PUT statements are executing Excel macro commands */ 
data _null_
file cmds; 
put '[SELECT("R1C1:R20C3")]'
put '[SORT(1,"R1C1",1)]'
put '[SAVE()]'
put '[QUIT()]'
run
While DDE is a finicky mechanism with poor error reporting and negligible debugging capabilities and is no longer 
being enhanced, it remains a powerful and flexible tool for some applications.  See the Recommended Reading 
section for some helpful DDE links.  More recent communication methods such as COM are also available but 
outside the scope of this paper.   
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
C# PDF Page Insert Library: insert pages into PDF file in C#.net
how to merge PDF document files by C# code, how to rotate PDF document page doc2.Save(outPutFilePath Add and Insert Multiple PDF Pages to PDF Document Using
rotate one page in pdf; pdf reverse page order preview
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
Able to extract PDF pages and save changes to original PDF file in C#.NET. C#.NET Sample Code: Extract PDF Pages and Save into a New PDF File in C#.NET.
reverse pdf page order online; how to save a pdf after rotating pages
SAS/ACCESS INTERFACE TO PC FILES ® 
At installations where the SAS/Access product for PC file formats software is available and licensed, SAS can read, 
create and write Excel workbooks directly using the IMPORT and EXPORT procedures and the Excel LIBNAME 
engine.   
If SAS is running on a 32-bit Windows system there are no functionality limitations.  In installations where  SAS is 
running on Unix, Linux or 64-bit Windows operating systems, there may be some restrictions and an additional PC 
Files Server may be required depending on the SAS version.  See the Supported Data Sources and Environments 
documentation for 9.2
and 9.3
for further details. 
IMPORT AND EXPORT PROCEDURES 
In addition to dealing with delimited text data, the IMPORT and EXPORT procedures can work directly with native 
Excel file formats ( ie. .xls and .xls* file suffixes ) subject to the requirements laid out in the Supported Data Sources 
and Environments  documentation.  The more generic ACCESS and DBLOAD procedures also have the ability to 
import and export Excel file format data. 
As mentioned earlier, worksheet row and column limits vary by Excel version.  As one would reasonably expect, 
those same limits apply with using IMPORT and EXPORT with native Excel files.   
PROC EXPORT
The EXPORT procedure can be used for a number of file formats ( eg. MS Access, Lotus, dBase ), and as a 
consequence has a large number of options.  Only some of the EXPORT options are applicable to Excel.  Further, 
the DBMS option specified determines which of the Excel options may be used.   
data class; 
set sashelp.class; 
label  sex  = 'Gender' 
name  = 'Given Name'
format height weight 9.2
run
proc export  data   
= class  
outfile  
'c:\temp\class_label.xls'  
dbms   
'Excel97'   label replace
sheet   
'SAS Paper' 
run
Note the headings for the NAME and SEX columns reflect the SAS labels specified in the data step.  If the LABEL 
option in EXPORT was not specified, the SAS field names would have appeared in the Excel column headings.  The 
sheet  name parameter has been specified as well.  Note that the SAS formats applied to the data set are NOT 
carried through to Excel.  
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
outPutFilePath As String = Program.RootPath + "\\" Output.pdf" Dim doc1 doc2.InsertPages(pages, pageIndex) ' Output the new document doc2.Save(outPutFilePath
pdf rotate just one page; rotate pdf page few degrees
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Similarly, Tiff image with single page or multiple pages is supported. Description: Convert to PDF and save it on the disk. Parameters:
rotate pdf pages by degrees; pdf rotate single page reader
Helpful PROC EXPORT options ( to Excel )
Option Name 
Purpose 
Values ( default ) 
DBDSOPTS 
Excel dataset options  
DROP= 
DBMS 
Specify Excel version 
EXCEL, EXCEL97, 2000, 2002, 
2003, EXCEL2007, EXCEL2010
SHEET
Names exported sheet within the workbook 
Data set name
DATA 
SAS dataset to export 
OUTFILE 
Path and Excel file to create 
REPLACE 
Overwrites an existing Excel file 
PROC IMPORT
IMPORT has a few more options, reflecting the flexibility often required when importing data from Excel.  During the 
import process SAS must make decisions as to the data type and length of the Excel columns.  Excel’s ability to store 
both numeric and non-numeric data in the same
column presents a challenge since SAS columns must be either
character or numeric.  For example, it’s conceivable that an entry of ‘N/A’ could be entered in place  of a numeric 
value in an Excel column where the entry was not applicable to the row, e.g. Age Licensed for a child.   The use of 
options like GUESSINGROWS and MIXED will be helpful in circumstances where columns contain mixed data. 
The somewhat bewildering array of IMPORT options and their (in)ability to work together as one might expect can 
make it necessary to post-process the resulting dataset after importing Excel data where columns contain mixed data 
types.   
Importing From Excel 2003 files 
proc import  datafile  
'c:\temp\import_2003.xls'  
out   
= school_xls  
dbms   
'xls'   
replace ; 
sheet   
'School'
getnames 
= yes; 
guessingrows = 20
run
For certain DBMS option values, the SAS log informs where column names have been altered to conform them to 
standard SAS column names:     
NOTE:    Variable Name Change.  Given Name -> Given_Name 
NOTE:    Variable Name Change.  **Note** -> VAR6 
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Able to get word count in PDF pages. Change Word hyperlink to PDF hyperlink and bookmark. Description: Convert to PDF/TIFF and save it on the disk.
how to rotate all pages in pdf at once; how to reverse pages in pdf
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Description: Convert to DOCX/TIFF with specified zoom value and save it into stream. Parameters: zoomValue, The magnification of the original PDF page size.
how to rotate pdf pages and save permanently; pdf rotate pages and save
NOTE: The import data set has 5 observations and 6 variables. 
NOTE: WORK.SCHOOL_XLS data set was successfully created. 
Note that History is a character variable because the “N/A” value was found within the first number of  rows ( i.e. 
GUESSINGROWS value ) in an otherwise numeric column.  If the first number of rows had all been numeric and the 
“N/A” was found in a row beyond the GUESSINGROWS va lue, the column would have been defined as numeric and 
the History value would have been set to missing for the observation with “N/A”. 
Importing from Excel 2007 files 
When importing data from this spreadsheet, rows 2 and 3 must be skipped since they do not contain the desired 
data.  Using the DBDSOPTS option, the FIRSTOBS value can be specified to define the location of the first data row.  
This option is only available when importing from Excel 2007/2010 files and the DBMS value specifies EXCEL2007 or 
EXCEL2010.  Unfortunately the DATAROW option used when importing delimited text data is not available for Excel 
files.   
proc import  datafile  
'c:\temp\import.xlsx'  
out   
= import 
dbms   
= excel2007    
replace ; 
sheet   
'2012'
getnames 
= yes; 
DBDSOPTS 
'firstobs=3'
run
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
Not only do the different DBMS values determine available options and procedure functionality, the log messages 
differ as well for each.  In this case, the column name alterations are not mentioned, nor is the number of imported 
observations reported in the log.  
NOTE: WORK.IMPORT data set was successfully created.
DBDSOPTS has been specified to skip over rows 2 and 3.  Note that the first row containing the column names is not 
counted when specifying FIRSTOBS.  When SAS alters the non-standard column names, the results are sometimes 
different than one might expect.  Where the first character is non-standard, it is replaced with an underscore.  In this 
case, the names of the columns no longer reflect what they contain as defined by the Excel file.  All columns have 
been defined as character data except Score which contained only numeric data.  Again, post-import processing is 
likely required to “clean up” this dataset.  
Helpful Excel options for PROC IMPORT Please see the SAS 9.2 documentation
for a fuller description of the 
various options available: 
Option Name 
Purpose 
Values ( default ) 
VERSION 
Defines version of Excel cell, also determines how 
other options perform ( or not ) 
97 for .xls files, 2010, 2007, 2003, 
2002, 2000, 97, 95, and 5 
RANGE 
Specific range within the workbook 
SHEET
Specific sheet within the workbook 
DBDSOPTS 
Excel dataset options 
 not available when DBMS=XLS 
FIRSTOBS=n ( useful when data 
does not start on row 2) 
OBS=nn ( must be GE firstobs ) 
DROP= 
GETNAMES 
Retrieve column names from first row 
YES | NO 
MIXED 
Convert all numeric values to character where a 
column contains both numeric and character 
YES | NO 
SCANTEXT
Scan the column to determine character field length 
YES | NO 
SCANTIME 
Assign TIME. format  where applicable 
YES | NO 
USEDATE 
Assigns date9. format  to Excel date columns 
GUESSINGROWS  Number of rows to scan to determine column type 
May be specified with DBMS=’XLS’ 
 Windows registry contains 
GUESSINGROWS setting 
as well 
EXCEL LIBNAME ENGINE 
Since SAS version 9, the EXCEL libname engine has been available to installations that license the SAS Access to 
PC Files software.  This engine allows programs to interact with Excel workbooks almost as if they are native SAS 
datasets.  Excel libnames can be used with virtually any SAS procedure and with the data step.   
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
The Excel libname syntax is quite familiar: 
libname xls <engine-name> physical-file-name eg. 
libname xls excel 'c:\temp\report.xls'
… SAS code … 
libname xls clear
* very important !! ; 
If the physical file specified does not exist, SAS will create a workbook of that name.  Once the libname statement is 
successfully executed, the Excel workbook and the sheets and named ranges defined in the workbook will be 
available in the SAS Explorer window. 
The library can be treated like any other SAS libref with a couple of caveats: 
•  row and column limitations as defined by Excel, eg. limitations on number of rows and columns depending 
on Excel version 
•  Excel sheet and column names can contain characters not normally considered valid by SAS, use of options 
validvarname=any may be necessary when reading
from Excel using the libname. 
To reference Excel sheet names and named ranges, the familiar libref.dataset syntax is used ( sheet names are 
suffixed with $, necessitating the use of SAS Name Literals syntax, ie. sheet1$’n when referencing ).  eg:  
data xls.'sheet1$'n; 
* referencing worksheet sheet1 ; 
data xls.range_out;  
* referencing named range range_out; 
Writing SAS data to Excel 
To populate Excel spreadsheets with the libname engine, almost any DATA or PROC step can be used,  eg. 
data xls.class; 
set sashelp.class; 
run
proc copy in  
= sashelp 
out  = xls; 
select prdsale shoes; 
run
The use of Excel “named ranges” and the Excel libna me engine, provide flexible output options that yield publishable 
reports ( see example in screenshot immediately below ).  For a fuller treatment of this subject matter, please see 
http://www.stratia.ca/papers/excel_libname.pdf
  
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
Reading Excel data into SAS 
In similar fashion, the Excel libname engine can be utilized by SAS data and procedure steps to read tabular Excel 
data.  The code below is reading from the “Class” w orksheet in the class.xlsx workbook.   
libname xls excel 'c:\temp\class.xlsx'
data my_class; 
set xls.'class$'n; 
run
proc print data = my_class label noobs 
run
libname xls clear
Log: 
   libname xls excel 'c:\temp\class.xlsx'; 
NOTE: Libref XLS was successfully assigned as follows: 
Engine:        EXCEL 
Physical Name: c:\temp\class.xlsx 
   data my_class; 
       set xls.'class$'n; 
   run; 
NOTE: There were 19 observations read from the data set XLS.'class$'n. 
NOTE: The data set WORK.MY_CLASS has 19 observations and 5 variables.
The “Given Name” Excel column heading has been conv erted into a standard SAS column name, but as the output 
results show, the original Excel column name has been preserved as a SAS column label. 
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
10 
Output: 
Given 
Name       Sex    Age    Height    Weight 
Alfred      M      14     69.0      112.5 
Alice       F      13     56.5       84.0 
Limitations of the Excel Libname: 
While the Excel libname is more powerful than PROC EXPORT / IMPORT, it does not have the full range of 
functionality provided by DDE.   
Excel Libname Capabilities 
Not Possible Via Excel Libname 
•  creating new workbooks 
•  creating new sheets and named ranges 
•  deleting existing data within a named range 
•  populating an existing, empty named range 
•  appending data to an existing named range 
•  reading data from an existing sheet or named range 
•  formatting changes, eg. font, color 
•  deleting an entire workbook, sheets or named 
ranges 
•  deleting cells containing a formula 
•  writing a formula into a cell 
Excel Libname options: 
Many of the same options already seen in the PROC IMPORT / EXPORT sections surface again for the Excel 
libname engine, while others have been renamed.  The following options are the most popular, see the SAS Online 
documentation for a complete list of options available. 
Option Name 
Purpose 
Values ( default ) 
DBLABEL 
Use SAS column labels to create Excel column 
headers rather than the column name 
YES | NO 
HEADER 
Use Excel column headers to name SAS columns 
YES | NO 
MIXED 
Convert numeric values to character  for mixed type 
columns 
YES | NO 
DBSASTYPE 
Define type and length for specific columns 
e.g. DBSASTYPE=(VarName=’CHAR(8)’) 
VERSION 
Specify Excel version 
Only necessary when creating Excel files 
SCAN_TEXT 
Must be set to NO to append to an existing Excel 
workbook 
YES | NO 
Programming: Foundations and Fundamentals
SAS Global Forum 2012
12
2
Documents you may be interested
Documents you may be interested