BookmarkSubscribeRSS Feed
deleted_user
Not applicable
When generating output with ODS RTF the size of the output file that is generated is considerably larger than that produced using DDE. Has anyone else noticed this? Can the output file size be reduced?
5 REPLIES 5
Cynthia_sas
SAS Super FREQ
Hi:
When I use the following program to send SASHELP.SHOES to 3 different destinations (sorry, I don't have a DDE program that creates an RTF/DOC file):
[pre]
ods rtf file='c:\temp\shoes.rtf';
ods pdf file='c:\temp\shoes.pdf' compress=9;
ods chtml file='c:\temp\shoes.html';
proc print data=sashelp.shoes;
run;
ods _all_ close;
[/pre]
I get the following sizes:
[pre]
SHOES.RTF = 486 KB
SHOES.PDF = 62 KB
SHOES.HTML = 87 KB
[/pre]

When I open SHOES.RTF with Word and RESAVE it as a .DOC file, the resulting
Word file is actually LARGER.
[pre]SHOES.DOC = 659 KB[/pre]

This has ALWAYS been my experience -- that the ODS RTF file is generally smaller than the same ODS RTF file re-saved as a Word Doc. I don't know what DDE is doing that is making the Word doc smaller in size. Perhaps DDE is generating very "spare" RTF or Word document instructions with no formatting or not in tables. But without knowing what the DDE process is or is not adding to your data or procedure output, it's very hard to compare ODS RTF to DDE. Does your DDE output look EXACTLY like the ODS RTF output or vice versa?

ODS PDF does have a compress option. COMPRESS=9 is the highest level of compression and as you can see, that makes the PDF file smaller than the HTML file that was created with the CHTML destination (CHTML is a destination that creates very, very plain HTML -- without any styles used.)

If I create the output file so there is no TABLE created for the report:
[pre]
ods listing file='c:\temp\shoes.txt';
proc print data=sashelp.shoes;
run;
ods _all_ close;
[/pre]

Then [pre]SHOES.TXT = 45 KB [/pre] in size (the smallest size of all ODS output -- but as I said, every "row" is just one line in the Word doc ... there is no TABLE structure added.) However, if I just re-save this LISTING file as a Word doc, then the file size is: [pre]SHOES_TXT.DOC = 79 KB [/pre] -- still with no table structure, however, you can see that just saving the equivalent of the plain text file as a Word doc, did add some overhead to the file size -- that's because the Word format is proprietary. RTF, in my experience is verbose, but still generally smaller than a WORD doc. However, since the RTF is just an ASCII text file, it does ZIP or compress nicely.

Depending on what your DDE file is creating, perhaps it comes down to the formatting that's added by ODS RTF to make the report table be a table and look nice in Word. What happens if you open the DDE-created file with Word and then resave the file as a Word doc?? Does the file size get bigger or smaller?

You could switch to ODS CHTML or ODS PDF for your output if you want to get a smaller file. The HTML file created with ODS CHTML -will- open in Word 97 and higher. It'll be pretty plain, although the rows will still be in a TABLE. If you added a style template into the mix (ODS MSOFFICE2K creates Microsoft-flavor HTML):
[pre]
ods msoffice2k file='c:\temp\shoes_rtfstyle.html' style=rtf;
proc print data=sashelp.shoes;
run;
ods _all_ close;
[/pre]

Then the resulting HTML file get MUCH bigger (more than double but the HTML file is STILL smaller than the same file created with ODS RTF):
[pre]
SHOES.RTF = 486 KB (uses RTF control strings)
SHOES_RTFSTYLE.HTML = 219 KB (HTML version of RTF file using RTF style)
SHOES.HTML = 87 KB (Plain, compact HTML file)
[/pre]

So you can see, it's hard to compare the ODS RTF file with the DDE file without knowing how much "style" information the DDE file is creating.

cynthia
deleted_user
Not applicable
Hi,

Thanks for reply.

We are using SAS version 8.2 to generate our outputs.

Some of the listings that we are producing are approx. 2000 pages and when creating the output using ODS RTF we using proc report to generate the listings a using the by page logic. This is so we can determine the maximum number of pages within he page x of y title to save rtf trying to paginate the report and so we can see a solid line at the bottom of the output within each page.

We are adapting the RTF style:
** create template for post-text tables **;
define style Styles.ods_pt /store=util.template;
parent=styles.rtf;
replace fonts/
'TitleFont2' = ("Courier New ",9pt ) /*procedure titles*/
'TitleFont' = ("Courier New ",9pt ) /*title */
'FootnoteFont' = ("Courier New ",9pt ) /*footnote */
'StrongFont' = ("Courier New ",9pt ) /*page numbers*/
'EmphasisFont' = ("Courier New ",9pt )
'FixedEmphasisFont' = ("Courier New ",9pt )
'FixedStrongFont' = ("Courier New ",9pt)
'FixedHeadingFont' = ("Courier New ",9pt)
'BatchFixedFont' = ("Courier New ",9pt )
'FixedFont' = ("Courier New ",9pt )
'headingEmphasisFont' = ("Courier New ",9pt )
'headingFont' = ("Courier New ",9pt ) /*table header*/
'docFont' = ("Courier New ",9pt );
** added 14May2005 **;
replace systemtitle from systemtitle /
protectspecialchars=off;
replace document from container /
asis = on
protectspecialchars=off;
replace SystemFooter from TitlesAndFooters /
asis = on
protectspecialchars = on
font= Fonts('FootnoteFont');
replace systemtitle from titlesandfooters/
asis = on
protectspecialchars=off;
replace body from document /
asis = on;
replace color_list
"Colors used in the default style" /
'link'= blue
'bgH'= white
'fg' = black
'bg' = white;
replace Table from output /
Background=_UNDEF_
cellpadding = 0pt
Rules=groups
Frame=hsides;
style Header from Header /
Background=_undef_;
style Rowheader from Rowheader /
Background=_undef_;
replace pageno from titlesandfooters/
Foreground=white;
end;

When we are producing the output using DDE, we first generate the table to a list file and then use DDE to save the file as a RTF file.

The file created using ODS is 40,500 kb and the DDE version is 7,756 kb. Also word takes a long time to open the ODS version.

Is the increase in size due to word creating a table per page?
Cynthia_sas
SAS Super FREQ
Hi:
I don't know the answer to your question. As I said before...using DDE and using ODS are two different processes and the size that ODS generates is the size of file that ODS generates -- I believe there's little you can to to cut down the RTF control strings that are being written (especially in SAS 8.2). With the need to have Page X of Y page numbering, I understand why you can't move to HTML and in SAS 8.2, the PDF page numbering was not as smooth as the RTF page numbering.

All I can offer is the method I used in SAS 8.2 to do a line above the footnote and to do page X of Y numbering.

(I did not know there was a way to prevent Word from repaginating when the RTF file opened. I thought that was a "feature" of Word.)

As you can see, in my code, I use the PAGE option on the BREAK statement in this example, but the program could be modified to do BY group processing too.

I'm not sure there's any thing in ODS that's making Word take a long time to open a file. Somebody sent me a book manuscript in Word format one time...it was only 300 pages, and I ended up taking a lunch break while Word opened and repaginated the file. I can only imagine how long Word will take to open 2000 pages.

However, at this point, I think the people best qualified to work with you on your question are the folks in Tech Support. I just don't use DDE, or know it well enough to make an intelligent contribution toward answering your question.

cynthia
[pre]
** here is my method of putting a line above each footnote and doing Page X of Y page numbering in SAS 8.2;

options nodate nonumber;

%let t3=%str(Table Number 1.0);
%let t4=%str(Listing of Serious Adverse Events);
%let t5=%str(Population: XXXXX);

title1 j=l font='Arial' h=10.1pt
%nrstr("Report R&D")
j=r font='Arial' h=10.1pt
"%sysfunc(datetime(), datetime16.)";

title3 j=c font='Arial' h=10.1pt "&t3.";
title4 j=c font='Arial' h=10.1pt "&t4.";
title5 j=c font='Arial' h=10.1pt "&t5.";

**make sure there is a SPACE between the 1 and the quote;
** in the footnote below;
** footnote1 is the LINE;
footnote j=l font='Arial' h=10.1pt
"^S={protectspecialchars=off "
"pretext='\brdrt\brdrs\brdrw1 '}"
"\~";

** footnote 2 is the page x of y string;
footnote2 j=r
"{\field{\*\fldinst{\b\i PAGE}}}\~{\b\i of}\~{\field{\*\fldinst{\b\i NUMPAGES}}}";

ods listing close;

ods rtf file='c:\temp\examp.rtf' style=journal;
ods escapechar='^';
proc report data=sashelp.shoes nowd
style(report)={rules=groups frame=hsides
cellspacing=0 cellpadding=2pt};
where region in ('Asia', 'Canada');
column region product sales;
define region /group noprint;
define product /order 'Region/Product'
style(header)={just=l}
style(column)={indent=20 cellwidth=1.5in};
define sales /sum;
break after region / summarize page;
compute before region /
style={just=l font_weight=bold};
line Region $25.;
endcomp;
run;
ods _all_ close;
title;
footnote;
[/pre]
deleted_user
Not applicable
Hi Cynthia,

Thanks for your replay.

We are using the following code to specity the page x of y text:

%if &maxpg ne %then title%eval(&i+1) height=&tfsize j=c "&tmp. ({Page \field {\*\fldinst PAGE \\*MERGEFORMAT}} {of %trim(%left(&maxpg.))})";

where maxpg is the maximum page number as derived in our program, we do this because if we use the notation you have detailed below word open the document but the pagings says page 1 or 1, page 2 of 1, page 3, of 2 etc.. until it has manged to work out the maximum number of pages for itself.

Using the footnote statement to produce the line creates a line which spans the entire document where as usign the template code creates a solid line at the bottome of each table, I guess it a matter of presentation.

Pauline
Cynthia_sas
SAS Super FREQ
Hi, Pauline:
I understand now what you're doing. I've seen the page 1 of 1, page 2 of 1 issue...mostly in earlier version of Word...97 and 2000. I don't think I've seen it in Office 2007, but I'll pay attention the next time I open an RTF file there to see whether it happens.

That still doesn't help you with your file size issue, however. If you had SAS 9 and could switch to ODS PDF, then you'd probably have the best of both worlds...page X of Y numbering that didn't change when the file opened and COMPRESS options as well.

cynthia

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 1710 views
  • 0 likes
  • 2 in conversation