You are here: Fearntech »

Category : SAS

Inline styles in ODS PRINTER output

Controlling formatting of ODS PRINTER (PDF/RTF) outputs has always seemed like a bit of a black art to me, but there are usually ways of getting around potential issues if you know where to look. With SAS V9.2, there are some new and probably unknown features, including the use of ‘inline styles’.

For a good introduction to this I recommend having a look at this SAS document “How to Add a Little Spice to Your PDF Output“.

As a quick example, you need to specify an escape character eg. “^” or “¬”.
ods escapechar="^" ;
Then, you can use that escape character “^” in a number of elements such as a title or PROC REPORT ‘LINE’ statement:
title1 "Colour ^{style [color=red] red} and ^{style [color=blue] blue}";
There are a couple of useful new functions NBSPACE and NEWLINE.
Example:
title1 "First line^{newline 2}and this line after 2 blank lines";

Other useful ODS PRINTER/ODS PDF documents:

Querying SAS option status in Base SAS

Some SCL functions are available to Base SAS but you cannot use the SCL functions OPTGETN and OPTGETC to find out what the current status of certain SAS Options are.

In this case you can use the OPTSAVE and OPTLOAD Base SAS procedures.

For example, if you wanted to query the current MPRINT and NOTES option settings so that you could change the options temporarily and then return them to the original values then you could use the following Base SAS code:

* Retain the current MPRINT and NOTES options in a dataset *;
proc optsave out=_sysoptions (where=(optname in ('MPRINT' 'NOTES')));
run;

* Force the options to not display generated macro code/notes *;
options nomprint nonotes;

.. other SAS macro code here ...

* Reset the options back to their original values *;
proc optload data=_sysoptions;
run;

You might want to do this where an external SAS macro called a sub-macro and the external macro may have the MPRINT/NOMPRINT and NOTE/NONOTES options set. You could then force the options to not display macro code and program notes while the sub-macro is running, but return the settings to their original values after sub-macro execution is complete.

Using PROTECTSPECIALCHARS in SAS ODS to allow HTML tags

How to use PROTECTSPECIALCHARS to allow HTML tags in your data when using HTML ODS in SAS.

When sending output to the HTML destination using PROC REPORT a number of the usual attributes are not available. For example the FLOW attribute on the DEFINE statement. It can therefore be necessary to include HTML tags within the data to be interpreted when the HTML page is viewed in a browser.

The problem is that if for example you enter ‘<BR />’ into your data then SAS will protect the characters and your output will actually be converted into character entities eg. ‘&lt;BR /&gt;’. The solution is to use the protectspecialchars attribute within style definitions, which when set to OFF causes SAS to ignore special characters and output exactly as entered.

An example PROC REPORT statement is shown below, note how the protectspecialchars is only being applied to the data in this case and so any special characters in column headers will still be protected.

proc report data=mydata nowindows
style (header) = [font_face=helvetica font_size=2]
style (column) = [font_face=helvetica font_size=1
protectspecialchars=off];

Using ANNOTATE to add text to a plot in SAS/GRAPH

Using ANNOTATE to add text to a plot in SAS/GRAPH

An example which creates an annotate dataset with a text label to be displayed in a plot, using GPLOT in SAS/GRAPH

* Adds text TEXT HERE at data point 23 on x-axis, 100% *;
* position on y-axis *;

data annot;
length function $8;
x=23;
function='LABEL'; text='TEXT HERE'; color='LIGR';
position='2'; xsys='2'; ysys='1'; y=100; size=1.5;
output;
run;

proc gplot....
plot ... / annotate=annot;
run;
quit;