I'm trying to define my own template. However, I'm getting some warnings when I run it. What am I doing wrong? The code and selected log output is below.
Thanks
CODE
proc template;
define style Styles.BB1;
parent = Styles.Journal;
replace fonts /
'TitleFont'= ("Times Roman",12pt,Bold)
'TitleFont2'= ("Times Roman",12pt,Bold)
'StrongFont'= ("Times Roman",10pt,Bold)
'EmphasisFont'= ("Times Roman",10pt,Bold)
'HeadingEmphasisFont' = ("Times Roman",10pt,Bold)
'HeadingFont' = ("Times Roman",10pt)
'DocFont' = ("Times Roman",10pt)
'footfont' = ("Times Roman",10pt)
'FixedEmphasisFont' = ("Courier",10pt,Bold)
'FixedStrongFont' = ("Courier",10pt,Bold)
'FixedHeadingFont' = ("Courier",10pt,Bold)
'BatchFixedFont' = ("Courier",10pt)
'FixedFont' = ("Courier",10pt)
;
replace color_list /
'link' = black
'bgH' = white
'bgT' = white
'bgD' = white
'fg' = black
;
replace Table from Output /
cellpadding = 2pt
cellspacing = 0pt
;
replace Pages from Document /
marginleft = 16
marginright = 16
backgroundcolor = colors('bg')
pagebreakhtml = html('break')
tagattr = " onload=""expandAll()"""
liststyletype = "decimal"
;
end;
run;
ods rtf file="&wealth\Wealth_trends.rtf" style=BB1;
LOG OUTPUT
NOTE: Overwriting existing template/link: Styles.Bb1
NOTE: STYLE 'Styles.Bb1' has been saved to: SASUSER.TEMPLAT
249 run;
NOTE: PROCEDURE TEMPLATE used (Total process time):
real time 0.03 seconds
cpu time 0.01 seconds
250
251 ods rtf file="&wealth\Wealth_trends.rtf" style=BB1;
WARNING: Could not locate style reference 'BB1.colors("notebg")'.
WARNING: Could not locate style reference 'BB1.colors("notefg")'.
WARNING: Could not locate style reference 'BB1.colors("bg")'.
Hi:
The REPLACE statement was "deprecated" starting with SAS version 9.2. So right off the top of my head, I would NOT recommend using the REPLACE statement at all, in your template code, unless you are still using SAS 9.1.3. And, the rule of thumb if you ARE using SAS 9.1.3 is that when you use the REPLACE statement, you should RESPECIFY all the style attributes that you want to use for that STYLE element (such as color_list) -- otherwise, you will come up with missing colors and warning messages. Starting in SAS 9.2 and higher, the preferred statement in a style template is the STYLE statement or CLASS statement, as shown in the code below.
In addition, if you look in STYLES.JOURNAL, you will see that the COLORS element does NOT have a "bg" attribute...it has "bg2", "bg3", etc, but no "bg" and if you look in the parent of JOURNAL, styles.default, you will see the same thing. So if you want the background for the Pages to be white, then either use "bg2", which is white or just use white as the value for the attribute.
In SAS 9.4, Windows 7, and Office 2013, this code worked for me. I added a change for HEADER and DATA -- very obviously changing the colors, so it was clear whether the new style template was being used or not.
Cynthia
ods path work.tmp(update) sasuser.templat(update) sashelp.tmplmst(read);
proc template;
define style Styles.BB1;
parent = Styles.Journal;
class fonts /
'TitleFont'= ("Times New Roman",12pt,Bold)
'TitleFont2'= ("Times New Roman",12pt,Bold)
'StrongFont'= ("Times New Roman",10pt,Bold)
'EmphasisFont'= ("Times New Roman",10pt,Bold)
'HeadingEmphasisFont' = ("Times New Roman",10pt,Bold)
'HeadingFont' = ("Times New Roman",10pt)
'DocFont' = ("Times New Roman",10pt)
'footfont' = ("Times New Roman",10pt)
'FixedEmphasisFont' = ("Courier",10pt,Bold)
'FixedStrongFont' = ("Courier",10pt,Bold)
'FixedHeadingFont' = ("Courier",10pt,Bold)
'BatchFixedFont' = ("Courier",10pt)
'FixedFont' = ("Courier",10pt)
;
class color_list /
'link' = black
'bgH' = white
'bgT' = white
'bgD' = white
'fg' = black
;
class header /
foreground=purple
textdecoration=underline
background=lightpink;
class data /
foreground=cyan
background=navy;
class Table from Output /
cellpadding = 2pt
cellspacing = 0pt
;
class Pages from Document /
marginleft = 16
marginright = 16
backgroundcolor = colors('bg2')
pagebreakhtml = html('break')
tagattr = " onload=""expandAll()"""
liststyletype = "decimal"
;
end;
run;
ods rtf file="c:\temp\Wealth_trends.rtf" style=BB1;
proc print data=sashelp.shoes(obs=10);
run;
ods rtf close;
Just a wild guess here.
You replaced the color_list. Looks like there are some color names which the template expects to be defined that are missing.
If you add:
'notebg'=white
'notefg'=black
'bg'=white
to your color_list, does that help?
--Q.
No. I get the same result if I add these lines.
Hi:
The REPLACE statement was "deprecated" starting with SAS version 9.2. So right off the top of my head, I would NOT recommend using the REPLACE statement at all, in your template code, unless you are still using SAS 9.1.3. And, the rule of thumb if you ARE using SAS 9.1.3 is that when you use the REPLACE statement, you should RESPECIFY all the style attributes that you want to use for that STYLE element (such as color_list) -- otherwise, you will come up with missing colors and warning messages. Starting in SAS 9.2 and higher, the preferred statement in a style template is the STYLE statement or CLASS statement, as shown in the code below.
In addition, if you look in STYLES.JOURNAL, you will see that the COLORS element does NOT have a "bg" attribute...it has "bg2", "bg3", etc, but no "bg" and if you look in the parent of JOURNAL, styles.default, you will see the same thing. So if you want the background for the Pages to be white, then either use "bg2", which is white or just use white as the value for the attribute.
In SAS 9.4, Windows 7, and Office 2013, this code worked for me. I added a change for HEADER and DATA -- very obviously changing the colors, so it was clear whether the new style template was being used or not.
Cynthia
ods path work.tmp(update) sasuser.templat(update) sashelp.tmplmst(read);
proc template;
define style Styles.BB1;
parent = Styles.Journal;
class fonts /
'TitleFont'= ("Times New Roman",12pt,Bold)
'TitleFont2'= ("Times New Roman",12pt,Bold)
'StrongFont'= ("Times New Roman",10pt,Bold)
'EmphasisFont'= ("Times New Roman",10pt,Bold)
'HeadingEmphasisFont' = ("Times New Roman",10pt,Bold)
'HeadingFont' = ("Times New Roman",10pt)
'DocFont' = ("Times New Roman",10pt)
'footfont' = ("Times New Roman",10pt)
'FixedEmphasisFont' = ("Courier",10pt,Bold)
'FixedStrongFont' = ("Courier",10pt,Bold)
'FixedHeadingFont' = ("Courier",10pt,Bold)
'BatchFixedFont' = ("Courier",10pt)
'FixedFont' = ("Courier",10pt)
;
class color_list /
'link' = black
'bgH' = white
'bgT' = white
'bgD' = white
'fg' = black
;
class header /
foreground=purple
textdecoration=underline
background=lightpink;
class data /
foreground=cyan
background=navy;
class Table from Output /
cellpadding = 2pt
cellspacing = 0pt
;
class Pages from Document /
marginleft = 16
marginright = 16
backgroundcolor = colors('bg2')
pagebreakhtml = html('break')
tagattr = " onload=""expandAll()"""
liststyletype = "decimal"
;
end;
run;
ods rtf file="c:\temp\Wealth_trends.rtf" style=BB1;
proc print data=sashelp.shoes(obs=10);
run;
ods rtf close;
Thanks Cynthia. All sorted now. I was following an old example (from a SUGI paper I think).
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.