sas注释用于放置数据标签

时间:2015-10-01 14:16:08

标签: sas annotate

我正在使用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;

1 个答案:

答案 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;