用于放置数据标签的 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;