SAS Proc模板条形图-不需要的组

时间:2019-03-11 15:16:33

标签: sas figure

我正在尝试通过VISIT为不同组创建条形图,每个组的百分比。完整的代码附在下面。

虽然按组显示每个计数,但是有些缺失的组是无法预期的。

有人可以看一下删除那些不存在的组吗?

例如,对于VISIT 1,N = 4的A组和N = 9的GROUP B不应在此处显示。

与此相关的另一个问题是'ods escapechar'选项在Proc模板下不起作用。

enter image description here

    data datain;
    input VISIT $ GRP $ TEST $ PCT TOTAL_Value Number_of;
    datalines;
    VISIT1 GROUPA AAA% 20.49  15.7 7
    VISIT1 GROUPA BBB% 4.02   15.7 7
    VISIT1 GROUPA CCC% 15.51  15.7 7
    VISIT1 GROUPA DDD% 60.88  15.7 7

    VISIT1 GROUPB AAA% 30.02  21.4 5
    VISIT1 GROUPB BBB% 9.45   21.4 5
    VISIT1 GROUPB CCC% 25.55  21.4 5
    VISIT1 GROUPB DDD% 34.98  21.4 5

    VISIT2 GROUPA AAA% 20.00  28.6 4
    VISIT2 GROUPA BBB% 4.00   28.6 4
    VISIT2 GROUPA CCC% 16.00  28.6 4
    VISIT2 GROUPA DDD% 60.00  28.6 4

    VISIT2 GROUPB AAA% 30.00  35.9 9
    VISIT2 GROUPB BBB% 9.00   35.9 9
    VISIT2 GROUPB CCC% 26.00  35.9 9
    VISIT2 GROUPB DDD% 35.00  35.9 9
run;

data datain1;
     set datain;
     length GRP_ $20;
     GRP_=strip(GRP)||'`N='||STRIP(PUT(Number_of,2.));
run;

ods escapechar='`';
ODS LISTING CLOSE;
proc template;
    define statgraph barchart;
        begingraph / datacolors=(YELLOW ORANGE GREEN purple) border=false;
            layout datalattice columnvar=VISIT/ 
                headerlabeldisplay=value 
                headerlabelattrs=(weight=bold)
                rowaxisopts=( Label=' ' offsetmin=0) columnaxisopts=(offsetmin=0.2 offsetmax=0.2 display=(ticks tickvalues)
                             griddisplay=off linearopts=( viewmin=0 viewmax=62 tickvaluesequence=(start=0 end=62 increment=5))); 
                layout prototype /walldisplay=none; 

                BarChartParm X=GRP_ Y=PCT / Group=TEST barwidth=0.5;

                endlayout;
                endlayout;
                layout globallegend;
                endlayout;
        endgraph;
    end;
run;
proc sgrender data=datain1 template=barchart;
run;

ods rtf close;
ods listing;

1 个答案:

答案 0 :(得分:1)

DATALATTICE在所有交叉口上创建统一的水平轴,作为简单视觉比较的基础。这就是为什么您获得刻度计数为零的原因。

SGPANEL可能是一种更简单的语法,可以完成某些“艰巨”的工作,如果仅执行GTL,则可能不得不自己做。节省时间是PANELBY / UNISCALE=选项。

此图表非常接近您想要的图表,可能只需要进行颜色调整。

proc sgpanel data=datain1;
  panelby visit / uniscale=row;
  vbar grp_ / group=test stat=sum response=pct;
run;

您可能还希望将GRP_分配更改为

 GRP_ = catx(' ', GRP, Cats('N=',Number_of));