注释语法PROC SGRENDER SAS

时间:2014-09-02 12:14:51

标签: graph sas

我有一个我正在使用的数据集,它与下面创建的数据集非常相似。我想在同一个图表上绘制按州分的年度趋势图。另外,我想要遮蔽图形中发生某些事情的部分(在这种情况下,得分下降)。让我们说我预计这个活动将在2011年到2013年之间。我想在那些年里遮蔽一个浅灰色矩形。我认为我的代码很接近,但不能完全正确的语法。

任何帮助实现这一点将不胜感激。此外,有关清理proc模板语句的任何建议(都需要?还是我可以组合成一个?)。感谢。

编辑:我认为主要问题是annorec数据步骤的语法。

 data statescores;
        input state $ year score;
        cards;
    NC 2010 75
    NC 2011 77
    NC 2012 72
    NC 2013 85
    NC 2014 87
    SC 2010 72
    SC 2011 73
    SC 2012 60
    SC 2013 79
    SC 2014 76
    VA 2010 80
    VA 2011 80
    VA 2012 79
    VA 2013 81
    VA 2014 83
    ;
    run;

data drop;                                                                                                                        
   input startdate enddate;                                                                                             
   datalines;                                                                                                                           
2011 2013                                                                                                                        
;   

data annorec;
/*   length function style color $8;       */
    retain xsys '2' ysys '1' when 'b';                                                                                                    
    set drop;                                                                                                       
    function='rectangle';
    height=.4;
    width=2; 
    x=startdate;                                                                                                                        
    y=60;  
    display="all";
    FILLCOLOR='LTGRAY'; 
    output;                                                                                                           
/*   function='bar';             */
/*   x=enddate;                  */
/*   y=90;                     */
/*   color='ltgray';           */
/*   style='solid';             */
/*   output;                      */
run;     

proc template;
    define style styles.stocks;
    parent=styles.listing;
    style GraphData1 from GraphData1 /
        ContrastColor=blue
        Color=red
        MarkerSymbol="CircleFilled"
        Linestyle=1;
    style GraphData2 from GraphData2 /
        ContrastColor=brown
        Color=blue
        MarkerSymbol="none"
        Linestyle=2;
    style GraphData3 from GraphData3 /
        ContrastColor=orange
        Color=orange
        MarkerSymbol="none"
        Linestyle=2;
end;
run;

proc template;
    define statgraph trend;
    begingraph;
    entrytitle "Scores for NC, SC, and VA";
    discreteattrmap name="stockname" / ignorecase=true;
    value 'NC' /
    markerattrs=GraphData1(color=red symbol=circlefilled)
    lineattrs=GraphData1(color=red pattern=solid);
    value 'SC' /
    markerattrs=GraphData2(color=orange)
    lineattrs=GraphData2(color=green pattern=dot);
    value 'VA' /
    markerattrs=GraphData3(color=blue)
    lineattrs=GraphData3(color=blue pattern=dot);
    enddiscreteattrmap;
    discreteattrvar attrvar=stockmarkers var=stock
    attrmap="stockname";
    layout overlay;
    seriesplot x=year y=score /
    group=state
    display=(markers)
    name="scores";
    discretelegend "scores" / title="State Scores";
    endlayout;
    endgraph;
    end;
run;
/* Plot the score trends */
ods pdf file="/sasdata/username/testgraph.pdf";
ods pdf style=styles.stocks;


proc sgrender data=statescores template=trend sganno=annorec;
run;
quit;

ods pdf close;

1 个答案:

答案 0 :(得分:1)

如果可以避免,我会尽量避免在GTL中使用离散属性映射。如果你只有几个州,你真的不需要它;即使在上面的代码中,除了覆盖您在早期模板步骤中设置的一些内容之外,它几乎没有什么作用。属性贴图对于SGPLOT来说很不错,但根据我的经验,GTL很难。

在这种情况下,您应该尝试使用BAND图来制作灰色条带。玩一些,但这应该基本上给你你想要的东西:

proc sgplot data=statescores;
series x=year y=score/ group=state;
band y=score upper=2013 lower=2011 /transparency=0.8 ;
run;

使用四行代码创建一个相当漂亮的图表,如果您想要相当容易地添加颜色(在属性映射数据集中或在模板代码中)。通常,在SGPlot / GTL世界中通常不需要注释数据集,因为您可以轻松地对图进行分层,并且可以通过分层图来完成大量注释。

如果您想要更详细的代码审核,我建议您在communities.sas.com上发帖,其中一些在SAS工作的图形开发人员经常会提供有关代码改进的建议。