使用SAS 9.3并尝试通过定义自定义样式并在整个PROC模板的状态块中使用多个ENTRY语句来遵守DRY。
自定义样式:
proc template;
define style llama;
parent=styles.fancyPrinter;
style CustomFonts from GraphFonts /
'GraphValueFont'=("<sans-serif>, <MTsans-serif>",25pt,italic)
;
class foo from GraphValueText /
font = CustomFonts('GraphValueFont')
color = GraphColors('gtext');
end;
run;
然后在ODS语句中通过style =选项打开。我尝试使用foo:
Entry halign=left "bar / 1000" / textattrs=foo;
但获取日志消息:
注意:样式元素&#39; foo&#39;选项TEXTATTRS无效。将使用默认值。
当使用这样的定义设置TEXTATTRS时,它工作正常(但由于我多次使用它,它不会被干掉):
textattrs=GraphValueText(weight=bold size=16pt color=CX800080)
另外,我知道ODS正在阅读样式定义,因为如果我这样做:
style GraphFonts from GraphFonts
并更改字体,它会影响图表。
答案 0 :(得分:1)
不幸的是,如果不这样做,我没有一个好的答案,尽管它可能存在。
我认为GTL并不是完全听你的。例如:
proc template;
define style llama;
parent=styles.fancyPrinter;
style CustomFonts from GraphFonts /
'GraphValueFont'=("<sans-serif>, <MTsans-serif>",25pt,italic)
;
style graphUnicodeText from GraphValueText /
color=red;
style graphValueText from GraphValueText/
color=green;
end;
run;
proc template;
define statgraph entry;
begingraph;
layout overlay;
entry halign=right "First entry statement" /
valign=top textattrs=graphValueText;
histogram weight;
entry halign=right "Second entry statement" /
textattrs=graphUnicodeText;
entry halign=right "Third entry statement" /
valign=bottom pad=(bottom=40px);
endlayout;
endgraph;
end;
run;
ods _all_ close;
ods html file="c:\temp\test.html" path="" gpath="c:\temp\" style=llama;
proc sgrender data=sashelp.class template=entry;
run;
ods html close;
请注意,您没有收到有关GraphUnicodeText的任何错误...但您也没有从中获得任何效果。我的猜测是,GTL只是对风格的部分认识正在开展工作,因此无法始终尊重您的要求。
我的建议(至少在/除非Sanjay或Dan或类似的东西可以帮助你找到更好的一个)是为此目的使用宏变量和/或动态变量。
proc template;
define style llama;
parent=styles.fancyPrinter;
style CustomFonts from GraphFonts /
'GraphValueFont'=("<sans-serif>, <MTsans-serif>",25pt,italic)
;
style graphUnicodeText from GraphValueText /
color=red;
style graphValueText from GraphValueText/
color=green;
end;
run;
proc template;
define statgraph entry;
begingraph;
layout overlay;
dynamic entrycolor;
entry halign=right "First entry statement" /
valign=top;
histogram weight;
entry halign=right "Second entry statement" /
textattrs=(color=entrycolor);
entry halign=right "Third entry statement" /
valign=bottom pad=(bottom=40px);
endlayout;
endgraph;
end;
run;
ods _all_ close;
ods html file="c:\temp\test.html" path="" gpath="c:\temp\" style=llama;
proc sgrender data=sashelp.class template=entry;
dynamic entrycolor="red";
run;
ods html close;
然后,您可以在模板中的多个位置重用entrycolor
,并允许用户在运行时指定它。它不理想,但确实有效,至少......