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

SAS Proc Template Bar Chart - Unwanted GROUP

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

虽然按组显示每个计数,但有一些缺失的组出现,这不是预期的。

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

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

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

    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_ ;
     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;

DATALATTICE 在所有交叉点上创建一个统一的水平轴,作为简单视觉比较的基础。这就是为什么你得到计数为零的刻度线。

SGPANEL 可能是一种更简单的语法,可以完成一些 'grunt' 如果仅使用 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));