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

问题描述 投票:0回答:1

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

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

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

例如,对于VISIT 1,在此处不应出现N = 4的A组和N = 9的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;
sas figure
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.