Page 1 
Paper 12-2010 
Output Delivery System (ODS) 
Simply the Basics 
Kirk Paul Lafler, Software Intelligence Corporation, Spring Valley, California 
Abstract 
Explore various SAS output formatting and reporting techniques with this Introduction to Output Delivery System 
hands-on workshop. Numerous examples are presented to improve mastery of ODS capabilities while providing a 
better understanding of ODS statements and options to perform common tasks. Topics include ODS Formatting 
statements and options; using the Escape character and formatting output; and various output destinations including 
RTF, PDF, Output SAS data set, Excel spreadsheet, and HTML output. 
Introduction 
Technology is moving at an astounding pace. With many new features and enhancements introduced in Version 8, 
users can finally sound the trumpets for what could be the most exciting time for output delivery since the introduction 
of the color monitor and printer. Never again will SAS users be confined to boring monospace output. Instead, output 
delivery has entered a new age taking full advantage of font characteristics, color, a variety of output layouts, and 
numerous other features. This paper and presentation will treat users with the many new and exciting features found 
in ODS. Sprinkled throughout will be numerous tips, tricks, and techniques that will, hopefully, make the learning 
process a little easier. 
Attendees  will  learn  numerous  tips,  tricks,  and  techniques  in  handling  output  including  the  advantages  / 
disadvantages with traditional SAS output; advantages of ODS; how ODS handles raw data; how ODS combines raw 
data with table definitions; how to open, close, and manage output destinations; how the Results window stores links 
to ODS output; how selection and exclusion lists are used; how to create output data sets, RTF files, HTML output, 
and postscript files; and how ODS is integrated with the DATA step. 
Output Delivery Basics 
The SAS
® 
Output Delivery  System (ODS) provides many ways to format output. It controls the way  output is 
accessed and formatted. Although ODS continues to support the creation of traditional SAS listing or monospace 
output (i.e., Listing), it provides many new features and greater flexibility when working with output. 
An early version of ODS appeared in Version 6.12 as a way to address the inherent weaknesses found in traditional 
SAS output.  It enables 
“quality” looking
output to be produced without having to import it into word processors such 
as MS-Word. In Version 8 and 9, many new output formatting features and options are introduced for SAS users to 
take advantage of. Users have a powerful and easy way to create and access formatted procedure and DATA step 
output. 
Tip #1 
ODS and 
“Batch”
Use 
Many of the ODS features found in the interactive side of the SAS Display Manager System (DMS) can also be used 
in  batch processing. ODS has  been designed to make exciting new formatting options available to users. In a 
windowing environment, ODS can send output to the following destinations: the output window (DMS), the listing file, 
HTML, SAS dataset, rich text format (RTF), postscript file, external output file (non-SAS file), or output device. The 
only exception for batch processing is having output sent to the output window. 
Tip #2 
What if 
I’m
Still Not Using the latest Version of SAS Software 
First  introduced  in  Version  6.12, ODS  offered  users  the capability  to format  output  to  destinations other than 
traditional line printers. Version 6.12 introduced the ability to deploy output to the web, the creation of SAS datasets 
and rich text format (RTF) files, and DATA step interaction. ODS was designed to address the inherent weaknesses 
found in traditional SAS output. It enables the creation of “quality” looking output without having to import it into word 
processors such as MS-Word. New output enhancements were introduced in Version 8 and then in Version 9, 
including the ability to create postscript files and output customizations. To take full advantage of the power offered in 
ODS, it is recommended that users upgrade to the latest Version as early as possible to take advantage of these 
features. 
Tip #3 
ODS and System Resources 
A very important efficiency consideration is to remember that ODS currently supports the following destinations: 1) 
Listing, 2) HTML, 3) rich text format (RTF), 4) postscript, and 5) Output. (Note: It also provides support in the DATA 
step.) Each ODS destination can be open or closed at the same time. For each open destination, ODS sends output 
object(s) to it. System resources are used when a destination is open. As a result, make sure any and all unwanted 
open destinations are closed to conserve on resources. 
Pdf text search - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
how to make pdf text searchable; how to search pdf files for text
Pdf text search - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
cannot select text in pdf file; search multiple pdf files for text
Page 2 
Tip #4 
Closing Destinations before and after use 
The Listing destination is open by default at SAS invocation, while the other destinations are closed. If nothing is 
done to suppress output to the Listing destination, your SAS programs automatically produce Listing output, just as 
they always have in the SAS System. If you needed to suppress printed output from being sent to the Listing 
destination (or DMS Output window) before the execution of a procedure step, the following ODS statement would be 
issued: 
ODS Listing Close; 
Proc univariate data=movies; 
Run; 
ODS Listing; 
By closing the Listing destination before the procedure code, the SAS System is actually suppressing output to that 
destination until it is reopened. The preceding example shows that at the end of the procedure step, the Listing 
destination is reopened by specifying ODS Listing; so output from subsequent steps can be sent to the Listing 
destination. 
Tip #5 
Deleting Output from the Results Window 
The Results window identifies procedure output that has been produced, providing users with an improved way to 
manage their output. It is customarily a good thing to remove unwanted output displayed in this window to conserve 
on  system resources. The Results window is opened by specifying  the  command ODSRESULTS on the  DMS 
command line or by selecting View Results from the pull-down menu. 
To delete procedure output, use the following steps: 
1.  Select the procedure folder you want to remove. 
2.  Click the Delete button on the task bar. 
3.  Select 
Yes
to confirm the deletion of the procedure output folder. 
Tracing Output 
Tip #6 
Tracing Procedure Output 
Output producing procedures often create multiple pieces or tables of information. In order to discriminate between 
the various pieces of information, it is advantageous to know the names assigned to each piece of information. The 
ability to display the names of individual pieces of information generated on output is referred to as tracing. The ODS 
statement syntax ODS trace ON / Listing; causes the SAS System to turn the trace feature on and print results to the 
SAS Listing destination. 
ODS Trace ON / Listing; 
Proc univariate data=movies; 
Run; 
ODS Trace Off; 
The trace record displays information about the data component, the table definition, and the output object. For 
example, the trace  record displays the following output  objects to the SAS Listing destination: 1) Moments, 2) 
BasicMeasures, 3) TestForLocation, 4) Quantiles, and 5) ExtremeObs. A sample trace record containing each output 
object’s name, label, template, and path is displayed for the Univariate procedure. Note that for each output object, 
the name, label, template, and path is displayed. 
Output Added: 
------------- 
Name:       Moments 
Label:      Moments 
Template:   base.univariate.Moments 
Path:       Univariate.age.Moments 
------------- 
C# Word - Search and Find Text in Word
C# Word - Search and Find Text in Word. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
select text pdf file; search pdf documents for text
C# PowerPoint - Search and Find Text in PowerPoint
C# PowerPoint - Search and Find Text in PowerPoint. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
select text in pdf file; searching pdf files for text
Page 3 
Output Added: 
------------- 
Name:       BasicMeasures 
Label:      Basic Measures of Location and Variability 
Template:   base.univariate.Measures 
Path:       Univariate.age.BasicMeasures 
------------- 
Output Added: 
------------- 
Name:       TestsForLocation 
Label:      Tests For Location 
Template:   base.univariate.Location 
Path:       Univariate.age.TestsForLocation 
------------- 
Output Added: 
------------- 
Name:       Quantiles 
Label:      Quantiles 
Template:   base.univariate.Quantiles 
Path:       Univariate.age.Quantiles 
------------- 
Output Added: 
------------- 
Name:       ExtremeObs 
Label:      Extreme Observations 
Template:   base.univariate.ExtObs 
Path:       Univariate.age.ExtremeObs 
------------- 
Selecting Output With ODS 
A selection or exclusion list exists for each open ODS destination. These lists determine which output objects to send 
to ODS  destinations.  To accomplish  this, ODS verifies  whether an  output object  is  included in  a destination’s 
selection or exclusion list. If it does not appear in this list, then the output object is not sent to the ODS destination. If 
an output object is included in the list, ODS determines if the object is included in the overall list. If it does not appear 
in this list, then the output object is not sent to the ODS destination. If an output object is included in the overall list 
then ODS sends it to the selected destination. 
Tip #7 
Selecting Desired Pieces of Information 
Once you know the individual names of each output object (from the trace), you can then select the desired object for 
reporting purposes. The syntax is: 
ODS select output-component-name
where output-component-name is the name of the desired output object. To select just the output object Moments 
from the Univariate procedure, the following syntax is specified: 
ODS Select Moments; 
Proc univariate data=movies; 
Run; 
Creating Unique Output With ODS 
Output Delivery System (ODS) can be used to create a variety of output formats. ODS statements are classified as 
global statements and are processed immediately by the SAS System. ODS statement options control what format 
engine(s) are turned on and in effect during the step or until another ODS statement is specified. 
ODS has built-in format engines (e.g., Listing, Output, RTF, PDF, DATA Step, HTML, and XML). Specifying an ODS 
statement and destination at a particular point in a program is important, because output-producing PROC and DATA 
steps will respond by sending output to the open destination. 
C# PDF delete text Library: delete, remove text from PDF file in
The following C# coding example illustrates how to perform PDF text deleting function in your .NET project, according to search option. // Open a document.
pdf text search tool; find and replace text in pdf
C# PDF replace text Library: replace text in PDF content in C#.net
The following C# coding example illustrates how to perform PDF text replacing function in your .NET project, according to search option. // Open a document.
find text in pdf files; how to select text in pdf and copy
Page 4 
Creating SAS Output Data Sets 
Tip #8 
SAS Output Data Sets 
Occasionally, output results are needed in a SAS data set rather than in printed form such as the Listing destination. 
Re-directing SAS procedure output to a data set is relatively simple with ODS. The syntax is: 
ODS Output output-table-name  = 
user-defined-table-name
< SAS Code > 
where output-table-name is the name of the desired output table (component) containing the information you want 
written to a data set, such as Moments in the UNIVARIATE procedure. User-defined-table-name is the name you 
supply for the newly created data set. It can be defined as either a temporary or permanent data set. Once an object 
is selected, specify the object in the ODS OUTPUT statement. For example, the Moments from the Univariate 
procedure is selected and output to a SAS data set in the following code. 
ODS Listing Close; 
ODS Output Moments = Movie_Moments; 
Proc univariate data=movies; 
Run; 
ODS Listing; 
When the OUTPUT destination is no longer needed, it can be closed with the following ODS statement: 
ODS OUTPUT CLOSE; 
VB.NET PDF replace text library: replace text in PDF content in vb
The following coding example illustrates how to perform PDF text replacing function in your VB.NET project, according to search option.
how to search text in pdf document; text select tool pdf
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
PDF Read. Text: Extract Text from PDF. Text: Search Text in PDF. Image: Extract Image from PDF. Easy to search PDF text in whole PDF document.
text searchable pdf; convert pdf to searchable text online
Page 5 
Tip #9 
Creating Rich Text Format (RTF) with ODS 
Rich text format (RTF) is text consisting of formatting attributes codes, such as boldface, italics, underline, etc. It is 
principally  used to encapsulate text  and formatting  attributes during copy-and-paste operations. Because word-
processing programs use RTF rather than ASCII when handling data, the need to reformat is a thing of the past. The 
syntax to create RTF output is: 
ODS RTF FILE = ‘user
-specified-file-
name’;
where user-specified-file-name references a complete and fully-qualified output location for the creation and storage 
of the RTF file, data, and codes. For example, the following code creates an RTF file using the Univariate procedure 
output. (Note:
The RTF extension is required). 
ODS Select Moments = moments; 
ODS RTF FILE=’ods-rtf-univariate.rtf’; 
Proc univariate data=movies; 
Title1 ‘Delivering RTF Output’; 
Run; 
ODS RTF Close; 
The results of the RTF output are displayed below: 
Delivering RTF Output 
The UNIVARIATE Procedure 
Variable:  Year 
Moments 
22 
Sum Weights 
22 
Mean 
1982.909
09 
Sum 
Observations 
43624 
Std 
Deviation 
15.21249
Variance 
231.4199
13 
Skewness 
-
2.110647
Kurtosis 
4.418072
09 
Uncorrected 
SS 
86507286 
Corrected SS 
4859.818
18 
Coeff 
Variation 
0.767180
51 
Std Error 
Mean 
3.243314
Tip #10 
Creating and Naming Postscript Files 
ODS enables the creation of a postscript file from SAS output to help ensure that formatting and content is preserved 
while maintaining complete printer independence. The next example shows the creation of a postscript file from Print 
procedure output. 
ODS Listing Close; 
ODS Printer Postscript; 
Proc print data=movies noobs n; 
Title1 ‘Example Creating a Postscript File’; 
Run; 
ODS Printer Close; 
ODS Listing; 
C# PDF Text Highlight Library: add, delete, update PDF text
The following C# coding example illustrates how to perform PDF text highlight function in your .NET project, according to search option. // Open a document.
pdf select text; search text in pdf using java
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Page: Rotate a PDF Page. PDF Read. Text: Extract Text from PDF. Text: Search Text in PDF. Easy to search PDF text in whole PDF document.
how to make a pdf document text searchable; how to select text in pdf image
Page 6 
Since the postscript file was created without assigning a filename, ODS assigns the name: SASPRT.PS.  Frequently, 
a user-defined filename is desired rather than the default name. In these cases, the ODS statement and File= option 
can be used to assign a name to the postscript file. 
ODS Listing Close; 
ODS Printer Postscript File=’Beginning_tutorials.ps’; 
Proc print data=movies noobs n; 
Title1 ‘Example Creating a Postscript File’; 
Run; 
ODS Printer Close; 
ODS Listing; 
Tip #11 
The Custom Reporting Interface 
ODS and the DATA Step 
To provide greater capabilities when working with custom output created in the DATA step, ODS is integrated into the 
DATA step. Two new options are necessary to take advantage of ODS: 1) the ODS option in the FILE statement and 
2) the _ODS_ option in the PUT statement. These two options are used to direct the results of a DATA step to ODS. 
For example, the following code directs output from a DATA step through the RTF format engine to create a RTF file. 
ODS RTF FILE=’ods-DATA-step.rtf’; 
Title1 ‘Great Movies’; 
Data 
NULL
Set movies; 
File print ods; 
Put _
ods_
Run; 
ODS RTF Close; 
The RTF file created in the previous DATA step code is illustrated. 
Page 7 
Output Delivery Goes Web 
The  Web  offers  incredible  potential  that  impacts  all  corners  of  society.  With  its  increasing  popularity  as  a 
communications medium, Web publishers have arguably established the Web as the greatest medium ever created. 
Businesses, government agencies, professional associations, schools, libraries, research agencies, and a potpourri 
of society
’s true believers have endorsed the Web as an efficient means of conveying their messages to the world.
The Web is not a static environment, but a dynamic medium capable of distributing content anywhere and at anytime. 
The 24/7 model permits information to be refreshed and updated continuously as new material becomes available. A 
primary objective of Web publishers everywhere is to engage visitors with timely and interesting content that brings 
them back for more. 
Tip #12 
Pagesize / Linesize Settings 
The Options PS= and LS= have no effect when used with the HTML destination (opposed to most other output-
producing steps that generate output to a print destination). If the PS= and/or LS= options are used with the HTML 
destination, they are simply ignored. 
The SAS System creates a type of “streaming” or continuous output and adds 
elevator bars (horizontal and/or vertical) for easy navigation. 
The SAS System does provide a way for users to paginate through output displayed in a body file. The HTML 
destination provides a way to designate an optional description of each page of the body file. The PAGE= file (when 
specified) recognizes each new page of output produced by ODS. What ODS does is create a section called Table of 
Pages containing links to the body file for easy navigation through output. 
Tip #13 
Deploying Output to the Web 
With the popularity of the Internet, you may find it useful to deploy selected pieces of output on your web site. ODS 
makes deploying procedure output to the web a simple process. Syntactically correct HTML code is automatically 
produced  and made  ready  for deployment  using  one  of the  Internet  browser software products  (e.g.,  Internet 
Explorer,  Netscape  Navigator,  etc.).  As a result, the  SAS  System and  the HTML  destination create a type of 
“streaming” or continuous output by adding elevator bars (horizontal and/or vertical) for easy navigation.
Tip #14 
Creating HTML Destination Files with ODS 
Four types of files can be created with the ODS HTML destination: 1) body, 2) contents, 3) page, and 4) frame. Each 
file is described below. 
The Body file contains the results from the procedure embedded in ODS-generated HTML code. Horizontal and 
vertical scroll bars are automatically placed on the generated page, if necessary. 
The Contents file consists of a link to each HTML table within the body file. It uses an anchor tag to link to each 
table. By using your browser software, you can view the contents file directly or as part of the frame file. 
The Page file consists of a link to each page of ODS created output. By using your browser, you can view the page 
file directly or as part of the frame file. 
The Frame file displays the body file and the contents file, the page file, or both. The next example shows the 
creation of Web-ready Univariate procedure output using the HTML format engine with the body=, contents=, page=, 
and frame= options. 
ODS Listing Close; 
ODS HTML body=‘ods-body.htm’ 
contents=‘ods-contents.htm’ 
page=‘ods-page.htm’ 
frame=‘ods-frame.htm’; 
proc univariate data=movies; 
Title1 ‘Creating HTML Output with ODS’; 
Run; 
ODS HTML Close; 
ODS Listing; 
A snippet of the HTML output appears on the next page: 
Page 8 
Tip #15 
Creating PDF Output 
To share output electronically, Adobe created a proprietary format called PDF. The objective of PDF is to enable the 
printing of output exactly as it is seen. The significance of PDF output is that it is a great format for Web deployment 
since it is completely independent of any printer destination. To create PDF output from the UNIVARIATE procedure, 
the ODS PDF option can be specified as follows. 
Code
ODS Listing Close; 
ODS PDF FILE=‘ods-univariate.pdf’; 
proc univariate data=movies; 
title1 ‘Creating PDF Output with ODS’; 
run; 
ODS PDF Close; 
ODS Listing; 
Tip #16 
Combining Output Results 
With the streaming capabilities of HTML output, results can be combined so they appear on the same screen (or 
page). Rather than having output controlled by one or more page breaks, HTML automatically displays output without 
page boundaries. The following example code illustrates combined output from the PRINT and MEANS procedures. 
Code
ods html path=‘c:\sas app’ 
body=‘ods-body-combined.html’ 
contents=‘ods-contents-combined.html’ 
page=‘ods-page-combined.html’ 
frame=‘ods-frame-combined.html’; 
proc print data=movies  noobs  n; 
title1 ‘Movie Classics Listing’; 
where rating in (‘G’, ‘PG’); 
run; 
proc means data=movies; 
title1 ‘Summary of Movie Classics’; 
class rating; 
run; 
ods html close; 
Page 9 
Output from Combining Output
Tip #17 
Testing Web Output 
Before transferring your Web files to a Web server, users should thoroughly test any HTML code to make sure they 
are problem-free. Many viewers will not return to Web pages that contain errors or do not work according to design. A 
word of caution: Not all Web browser software handles web pages the same way. Microsoft Internet Explorer 
may display your web pages differently than Netscape Navigator and others. 
Before deploying web-based output to the Web or Intranet, it is important to visually inspect and test your output to 
see how your Web pages behave. Web validation services are available for users to check web pages for errors or 
inconsistencies. The following recommendations should be considered before deploying Web output. 
1.  Check spelling 
check the spelling on each of your Web pages before making them available. 
2.  If possible, use a validation service to identify errors in your use of HTML. 
3.  Test the Web pages to see how easy they are to access and browse through the information. You should verify 
that each Web page has a consistent design and layout. 
4.  Turn off images to test how Web pages will look and what information is displayed when viewers use Web 
browsers that cannot display in pages or when they turn off images. 
5.  Verify links to make sure each link takes you to the intended destination and that each link contains information 
of interest to your viewers. 
6.  Enlist a test audience to check out your Web pages and to solicit their feedback. This feedback is very important 
since it enables you to improve the way your Web pages look and operate. It is also important that you compare 
your test audience’s feedback with your own object
ives to determine which areas require more work. 
7.  Test your Web pages with different Web browser software to evaluate how they will look. The two most popular 
Web browsers are Microsoft Internet Explorer and Netscape Navigator. 
Page 10 
8.  Test Web pages on different computers because they can look and sound differently when the content consists 
of animation. 
9.  Determine the speed of transferring Web page content. If the content is too text-rich or image-rich, the excessive 
transfer speeds may cause viewers to tune-out rather than tune-in. 
10.  View your Web pages at different resolutions to determine the amount of information a monitor can display. 
Building Drill-Down Applications 
As a general rule, the best type of user interface design for transaction-based applications is a drill-down user 
interface opposed to a character-
based one. It’s referred to as drill
-down because a user drills down through the data, 
layer by layer, until the desired information is found. 
The key to building successful drill-down applications requires systems analysts and system designers to understand 
what users are trying to achieve with the data. These individuals must recognize the tasks users engage in while 
trying to access the desired information. These tasks are then translated into a series of selection criteria that users 
should be able to select from. 
Tip #18 
Building a Drill-down Application 
To simplify the process  of  building  a  graphical drill-down application in the SAS  System,  five easy steps are 
presented. 
1.  Create a data set containing the location of the HTML link variable. 
2.  Create HTML path with BODY and optional files. 
3.  Create graph using HTML= option and link variable. 
4.  Create detail list drill-down pages. 
5.  Use Web browser to navigate through resulting application. 
Example Drill-down Application 
In the following drill-down application, a pie chart is used to display summary information on G-rated and PG-rated 
movies. A horizontal or vertical bar chart could also be used as the graphical user interface. To display detailed 
information on a movie category, a user would only need to click on the desired piece of the pie chart that they had 
interest in, as shown in the illustration below. Control would then be passed, via hyperlinks, to the underlying detail 
output created in step #4 above. 
Documents you may be interested
Documents you may be interested