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));
我正在尝试为不同的组创建一个条形图,每个组的访问百分比。完整的代码附在下面。
虽然按组显示每个计数,但有一些缺失的组出现,这不是预期的。
有人可以看看删除那些不存在的组吗?
例如,对于 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));