在PROC模板中使用自定义类而不是GraphValueText用于textattrs选项?

时间:2015-08-06 19:47:59

标签: sas sas-gtl

使用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

并更改字体,它会影响图表。

1 个答案:

答案 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,并允许用户在运行时指定它。它不理想,但确实有效,至少......