我正在使用sas sgplot来绘制具有3个响应的变量。 我想让它绘制3列数据。第一列是实体的总计数, 第二列是同一实体的违规计数,第三列是违规百分比。我正在使用proc sgplot。我给每个响应一个三个vbar语句。因此条形图被过度显示,但百分比响应将百分比值放在条形图的中间,因此它看起来很邋..我希望百分比值显示在条形图的正上方,但不是在它的正上方而是直线,因为条形图是不同的高度。 我知道我需要创建一个anno集,但之前没有这样做过。有人可以请帮助。这是我现在的图表代码。感谢
proc sgplot data=k noborder nowall ;
vbar Entity_Name / response=tot_trans_count dataskin=GLOSS LEGENDLABEL="Number of Transactions"
DATALABELPOS=TOP DATALABEL DATALABELATTRS=(Color=blue Family=Arial Size=10 Style=Italic Weight=BOLD )
barwidth=0.8
transparency=0.0;
YAXIS DISPLAY=NONE;
vbar Entity_Name / response=violation_count dataskin=GLOSS LEGENDLABEL="Number of Violations"
DATALABELPOS=BOTTOM DATALABEL DATALABELATTRS=(Color=red Family=Arial Size=10 Style=Italic Weight=BOLD)
barwidth=0.8
transparency=0.0;
YAXIS DISPLAY=NONE;
vbar Entity_Name / response=violation_percent dataskin=GLOSS LEGENDLABEL="Number of Violations"
DATALABEL DATALABELATTRS=(Color=red Family=Arial Size=10 Style=Italic Weight=BOLD)
barwidth=0.8
transparency=0.0;
YAXIS DISPLAY=NONE;
run;
答案 0 :(得分:1)
我在下面有一个非注释解决方案。这将显示最高栏顶部百分比的文本,并包含图例中的百分比。但是没有显示百分比的标准,因为我认为显示百分比是不正确的,并且当它们是不同的概念时,它们在相同的范围内计数。看看这是不是你想要的。
data k;
infile cards;
input Entity_Name $ violation_percent_char $ tot_trans_count violation_count ;
*** CONVERT PERCENT VARIABLE FROM CHARACTER TO NUMERIC ***;
violation_percent = input( compress(violation_percent_char, '%'), 3.0);
cards;
Name1 20% 10 2
Name2 56% 171 96
Name3 30% 43 13
Name4 9% 23 2
Name5 24% 111 27
Name6 58% 429 248
Name7 39% 180 71
Name8 33% 6 2
Name9 41% 70 29
Name10 50% 10 5
Name11 3% 31 1
Name12 67% 9 6
Name13 23% 125 29
Name14 10% 126 12
Name15 32% 237 75
Name16 15% 27 4
Name17 25% 28 7
Name18 100% 3 3
Name19 30% 138 42
Name20 22% 763 165
Name21 100% 2 2
Name22 22% 106 23
Name23 20% 103 21
Name24 5% 20 1
Name25 3% 1463 37
;
run;
proc sgplot data=k ;*noborder nowall ;
*** PLOT TOTAL COUNT AND USE THIS TO REPORT THE PERCENT BY USING THE DATALABEL OPTION ***;
*** BY SPECIFYING THIS VBAR STATEMENT FIRST, THIS BAR WILL BE OVERLAID BY THE NEXT VBAR FOR "TOTAL" ***;
*** ATTEMPT TO COORDINATE THE TEXT COLOR WITH THE LEGEND COLOR IN THE GRAPH ***;
vbar Entity_Name / response=tot_trans_count dataskin=GLOSS LEGENDLABEL="Percent of Violations"
DATALABEL DATALABEL=violation_percent_char DATALABELATTRS=(Color=BLUE Family=Arial Size=10 Style=Italic Weight=BOLD)
barwidth=0.8
transparency=0.0;
vbar Entity_Name / response=tot_trans_count dataskin=GLOSS LEGENDLABEL="Number of Transactions"
DATALABELPOS=TOP DATALABEL DATALABELATTRS=(Color=red Family=Arial Size=10 Style=Italic Weight=BOLD )
barwidth=0.8
transparency=0.0;
*YAXIS DISPLAY=NONE;
vbar Entity_Name / response=violation_count dataskin=GLOSS LEGENDLABEL="Number of Violations"
DATALABELPOS=BOTTOM DATALABEL DATALABELATTRS=(Color=green Family=Arial Size=10 Style=Italic Weight=BOLD)
barwidth=0.8
transparency=0.0;
*YAXIS DISPLAY=NONE;
*** ONLY NEED 0NE YAXIS STATEMENT FOR ENTIRE SGPLOT ***;
YAXIS DISPLAY=NONE;
run;