我正在尝试通过VISIT为不同组创建条形图,每个组的百分比。完整的代码附在下面。
虽然按组显示每个计数,但是有些缺失的组是无法预期的。
有人可以看一下删除那些不存在的组吗?
例如,对于VISIT 1,N = 4的A组和N = 9的GROUP 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_ $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;
答案 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));