有没有办法直接为轴值和数据标签指定格式?据我所知,它使用了应用于因变量的任何格式。
示例:
data sample;
input group $ number;
format number dollar6.1;
cards;
A 55.2
B 20.3
C 47.1
D 43.2
;
run;
axis1 minor=none order=0 to 60 by 10;
proc gchart data=sample;
vbar group/ type=sum sumvar=number sum levels=all raxis=axis1;
run;
如果我将格式设置为dollar6.1,则轴标签具有不必要的小数(0.0,10.0,20.0等)
但是,如果我将格式设置为dollar6.0,那么每个条形图顶部的标签都会缺少我想要显示的小数。
是否可以单独为这两种格式指定格式?
答案 0 :(得分:2)
我不相信你可以单独控制格式;你对时间轴,日志轴等的控制有限,但不能控制数字格式。
你可以做的是两件事之一。至少在SGPLOT中,您可以使用不同的格式创建辅助变量,并使用格式化您希望轴格式化的变量生成空图形(或条形图的相同副本但没有标签);然后使用第二个格式化的变量生成图表。
其次,您可以为轴指定显式值。您可以使用VALUE =覆盖刻度线上的标签,而不是使用数据产生的自动值。如果你有一个变化的轴(即你用不同的轴数或其他东西生产其中的20个),这不是最佳的,但如果它是一个固定的轴,那么你可能可以逃脱这个。请查看the AXIS statement in GChart以获取更多信息。
你如何做第一个选择:
data sample;
input group $ number;
format number dollar6.1;
axis_number = number;
format axis_number dollar6.0;
cards;
A 55.2
B 20.3
C 47.1
D 43.2
;
run;
proc sgplot data=sample;
vbar group /response=axis_number;
vbar group /response=number datalabel;
yaxis label='Number (sum)';
run;
创建条形图两次,一次使用axis_number然后定义轴,一次使用数字定义标签。
答案 1 :(得分:2)
您可以使用annotate dataset执行此类操作。如果我对它的工作方式有充分的了解,我会对此做出更好的解释,但我很少使用它,通常更多的是试错过程:
data sample;
input group $ number;
format number dollar6.0;
cards;
A 55.2
B 20.3
C 47.1
D 43.2
;
run;
创建anno
数据集。我从上面的链接中取出了这个并且摆脱了无关紧要的东西。设置[function]='label'
,[position] = '2'
将标签放在条形图上方,xsys = 2'
和ysys = 2
以使数据值的坐标为基础。 size
和style
控制字体。
midpoint=group
将标签放在条形图上,y=number
使标签的y坐标等于条形图的高度,text
是指定条形图的值和格式的位置标签
data anno;
length function style $12;
retain function 'label' size 1 position '2'
xsys '2' ysys '2' style 'Albany AMT';
set sample;
midpoint=group;
y=number;
text=put(number,dollar6.1);
run;
使用当前代码制作图表,但删除sum
并插入annotate=anno
。
axis1 minor=none order=0 to 60 by 10;
proc gchart data=sample;
vbar group/ type=sum sumvar=number annotate=anno levels=all raxis=axis1;
run;
答案 2 :(得分:1)
如果您正在运行9.2或更高版本,并且很高兴使用Graphics Template Language (GTL),那么您可以这样做:
为您的数据添加一个新列,用于舍入值:
data sample;
input group $ number;
format number dollar6.1;
axisval=round(number,1);
cards;
A 55.2
B 20.3
C 47.1
D 43.2
;
run;
定义图表:
proc template;
define statgraph mychart;
begingraph;
layout overlay;
barchartparm x=group y=axisval / datalabel=number;
endlayout;
endgraph;
end;
run;
使用我们之前创建的数据渲染图表:
proc sgrender data=sample template=mychart;
run;
这里的技巧是使用datalabel=
语句的barchartparm
选项来指定哪个列包含标签的值。可能还有其他一些方法可以使用GTL并指定格式,但这对我来说似乎非常简单。
我认为GTL包含在Base SAS 9.2中。