There are several alternatives to writing to a Microsoft Word file when you use the SAS® Output Delivery System (ODS). The RTF, TAGSETS.RTF and TAGSETS.RTF_SAMPLE destinations create an RTF formatted file. The WORD destination, which is still considered preproduction, creates a DOCX formatted file. The destinations provide many of the same functions, although some features are unique to each one. The destination that you choose might vary depending on your desired final output.
Both the Tagsets and the Word destination enable you to specify suboptions using the OPTIONS option. These suboptions are described in the documentation. For the Tagsets destinations, you can also see a list of the available suboptions and their values in the log by using the DOC='HELP' suboption as follows:
Ods tagsets.rtf file='test.rtf' options(doc='help'); |
What is common across destinations
There are some often-used features that are common across all ODS destinations that write to Microsoft Word. All ODS statements support the following options:
- SASDATE – This option uses the date and time that the SAS session started if the DATE system option is turned on. Otherwise, the date and time listed are when the file is created. This is the default setting for the Tagsets destinations.
- COLUMNS= – This option allows for multi-column output.
- None of the destinations support the Report Writing Interface or the ODS LAYOUT ABSOLUTE option.
- All destinations can create a table of contents, although the options for this task vary. To show the Table of Contents once the file is created, right-click in the page and select Update Field:
- Ods rtf file='file.rtf' contents toc_data;
- Ods tagsets.rtf file='file.rtf' options(contents='yes' toc_data='on');
- Ods word file='file.docx' options(contents='yes' toc_data='on);
- The TOC_LEVEL='n' suboption in the Tagsets and Word destinations controls the level of expansion of the table of contents.
Unique features, strengths and limitations for each destination
ODS RTF
The RTF destination was introduced in SAS® 8.1. The style template inherits from Styles.Printer. By default, title and footnote text is placed in the header and footer sections of the document. The BODYTITLE option in the ODS statement places the title and footnote text in the body of the document. The KEEPN option controls where tables are split on the page and the NOTRKEEP option controls whether table rows can be split by a page break.
A significant limitation of the RTF destination is that paging can be difficult because there is no vertical measurement. SAS allows Word to determine paging. In addition, the RTF destination does not support the UNIFORM option.
Here is an example:
ods _all_ close; ods rtf file='paging_rtf.rtf' ; proc print data=sashelp.cars(obs=15) noobs; title 'Shows paging difficulties where columns wrap on the same page'; run; ods _all_ close; |
ODS Tagsets.RTF
The Tagsets.RTF destination was introduced in SAS® 9.2, partly to provide more control over paging. The style template inherits from Styles.Printer. Bodytitle is the default behavior, which means that the title and footnote text is placed in the body of the document. This destination supports the UNIFORM option. Another useful option is TABLEROWS=n, which specifies the number of rows in each table before ODS inserts a page break. Suboptions that are often used include the following:
- CONTINUE_TAG= controls whether the “(Continued)” text is displayed at the end of a page when a table crosses a page boundary.
- VSPACE= controls vertical space in the document.
- WATERMARK= adds a diagonal text string as an argument.
Here is an example:
ods tagsets.rtf file='watermark_vspace_tagsets_rtf.rtf' options(doc='help' watermark="Draft" vspace='off') ; proc print data=sashelp.class noobs; title 'Shows watermark and no space between title and table'; run; ods _all_ close; |
ODS Tagsets.RTF_Sample
The Tagsets.RTF_Sample destination was also introduced in SAS 9.2. The style template inherits from Styles.Printer. The main distinction between this tagset and Tagsets.RTF is that this tagset places the title and footnote text in the header and footer of the Word document. This behavior makes it similar to the RTF destination without the BODYTITLE option. It includes the same suboptions listed in the ODS Tagsets.RTF section.
Here is an example:
ods tagsets.rtf_sample file='title_header_tagsets_rtf_sample.rtf' options(doc='help'); proc print data=sashelp.class noobs; title 'Shows title in Header section of document'; run; ods _all_ close; |
ODS WORD
The ODS WORD destination is still considered preproduction in the current release of SAS. It produces Microsoft Word output that is compatible with Microsoft Office 2010 and later. The style template inherits from Styles.Word and uses the SCHEME statement in the TEMPLATE procedure to define its style.
Some strengths of the ODS WORD destination are that it creates a native DOCX file and the file size can be smaller than that of a file created by the RTF destinations. The following file created with ODS WORD is 12 KB. The same file that is created with ODS RTF is 22 KB. There are several suboptions that help control where text splits on a page, including KEEP_LINES and KEEP_NEXT. The ODS WORD destination also supports accessibility and SVG output.
The ODS WORD destination currently does not support watermarks.
Here is an example:
ods word file='word_output.docx' sasdate; proc print data=sashelp.class noobs; title 'ODS WORD output'; run; ods _all_ close; ods listing; |
Conclusion
Multiple ODS destinations can create a Microsoft Word file. Any method that you choose can create presentation-quality output for Microsoft Word. Thank you for reading and please check out the documentation links below.
2 Comments
Thank you. It is very useful. Is there any option ODS WORD like flow=tables in ODS EXCEL?
Thanks for your comment. The ODS WORD destination is still considered preproduction. The suboptions that are available are documented below:
ODS WORD options