用于放置数据标签的 sas 注释
sas annotate for placing datalabels
我正在使用 sas sgplot 绘制具有 3 个响应的变量。
我希望它绘制 3 列的数据。第一列是一个实体的总数,
第二列是同一实体的违规计数,第三列是违规百分比。我正在使用 proc sgplot。我给它三个 vbar 语句,每个响应一个。所以这些条被夸大了,但百分比响应将百分比值放在条的中间,所以它看起来很草率。我希望百分比值出现在条形图的正上方,但不是在一条直线上而是在它的正上方,因为条形图的高度不同。
我知道我需要创建一个纪元集,但之前没有这样做过。有人可以帮忙吗?这是我现在拥有的图表的代码。谢谢
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;
我在下面有一个非注释解决方案。这会在最高栏的顶部显示百分比文本,并在图例中包含百分比。但不显示百分比条,因为我认为当它们是不同的概念时显示百分比和计数是不正确的。看看这是不是你想要的。
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;
我正在使用 sas sgplot 绘制具有 3 个响应的变量。 我希望它绘制 3 列的数据。第一列是一个实体的总数, 第二列是同一实体的违规计数,第三列是违规百分比。我正在使用 proc sgplot。我给它三个 vbar 语句,每个响应一个。所以这些条被夸大了,但百分比响应将百分比值放在条的中间,所以它看起来很草率。我希望百分比值出现在条形图的正上方,但不是在一条直线上而是在它的正上方,因为条形图的高度不同。 我知道我需要创建一个纪元集,但之前没有这样做过。有人可以帮忙吗?这是我现在拥有的图表的代码。谢谢
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;
我在下面有一个非注释解决方案。这会在最高栏的顶部显示百分比文本,并在图例中包含百分比。但不显示百分比条,因为我认为当它们是不同的概念时显示百分比和计数是不正确的。看看这是不是你想要的。
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;