楼主: webgu
7645 17

[实际应用] 横轴带有两级分类变量的cluster bar chart [推广有奖]

11
farmman60 发表于 2013-12-5 21:29:27
proc sgplot data=yourfile;
vbar group/response=rowpercent group=location groupdisplay=cluster;
run;

12
webgu 发表于 2013-12-5 22:09:27
farmman60 发表于 2013-12-5 21:29
proc sgplot data=yourfile;
vbar group/response=rowpercent group=location groupdisplay=cluster;
run ...
呵呵,你少了一个CITY.
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

13
heperwong 在职认证  发表于 2013-12-5 23:05:51
webgu 发表于 2013-12-5 15:11
SHOW 一下?
好吧,我也贴出很烂的一种方法。。ps:可能要在sas9.3里面run.
  1. data y;
  2. input  city location RowPercent group ;
  3. cards;
  4. 8 1 31.14256825 1
  5. 8 2 50.36649215 1
  6. 9 1 49.07508161 1
  7. 9 2 49.18918919 1
  8. 11 1 46.84343434 1
  9. 11 2 50.35714286 1
  10. 12 1 37.12260436 1
  11. 12 2 38.72071598 1
  12. 13 1 45.23690773 2
  13. 13 2 53.47416645 2
  14. 14 1 42.39492995 2
  15. 14 2 39.86676017 2
  16. 15 1 38.63028357 2
  17. 15 2 38.81401617 2
  18. 16 1 48.17444219 2
  19. 16 2 38.11931244 2
  20. 17 1 31.59509202 3
  21. 17 2 25.31522793 3
  22. 18 1 45.62558796 3
  23. 18 2 39.9078341 3
  24. 19 1 35.46511628 3
  25. 19 2 22.08333333 3
  26. 20 1 46.20462046 3
  27. 20 2 21.28309572 3
  28. ;
  29. run;
  30. proc sort data = y; by city group;run;
  31. proc transpose data=y out=y1;
  32. by city group;
  33. id location;
  34. var rowpercent;
  35. run;

  36. data y2;
  37. set y1;
  38. if group=2 then city=city+2;
  39. else if group=3 then city=city+4;
  40. run;

  41. proc sql;
  42. insert into y2(city,_1,_2)
  43.       values (13,0,0)
  44.           values(14,0,0)
  45.            values (19,0,0)
  46.             values (20,0,0);
  47. quit;

  48. proc template;
  49.    define statgraph example;
  50.    begingraph;
  51.    layout overlay/cycleattrs=true;
  52.    barchart y=_1 x=city/barwidth=0.3 discreteoffset=-0.15 ;
  53.    barchart y=_2 x=city/barwidth=0.3 discreteoffset=+0.15;
  54.    endlayout;
  55.    endgraph;
  56.    end;
  57.    run;
  58.   proc sgrender data=y2 template=example;
  59.   run;
复制代码
已有 1 人评分经验 收起 理由
webgu + 80 观点有启发

总评分: 经验 + 80   查看全部评分

14
yuerqieqie 发表于 2013-12-6 00:06:04
proc sgpanel data = test;
        panelby group/layout=columnlattice onepanel novarname noborder colheaderpos=top;
        vbar city/group = location response = rowpercent stat = mean groupdisplay=cluster;
run;
已有 1 人评分经验 收起 理由
webgu + 80 观点有启发

总评分: 经验 + 80   查看全部评分

15
webgu 发表于 2013-12-6 08:57:46
谢谢楼上两位,确实给了一些思路。不过,横坐标的GROUP间的间隙的显示还是差点意思。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

16
webgu 发表于 2013-12-7 09:40:35
@爱美丽高 给出了一个比较好的代码:

proc sgpanel data = y;
    panelby group/layout=columnlattice  spacing=20   uniscale=row   novarname noborder onepanel colheaderpos=top;
    vbar city/group = location response = rowpercent stat = mean groupdisplay=cluster;
run;

缺限就是一加SPACEING 横轴断裂。可惜没有找到相应的控制选项。

QQ截图20131207093907.png (8.86 KB)

QQ截图20131207093907.png

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

17
webgu 发表于 2013-12-7 09:41:40
yuerqieqie 发表于 2013-12-6 00:06
proc sgpanel data = test;
        panelby group/layout=columnlattice onepanel novarname noborder colheader ...
uniscale=row ,spacing两个选项做一下设置。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

18
yuerqieqie 发表于 2013-12-9 21:51:26
webgu 发表于 2013-12-7 09:41
uniscale=row ,spacing两个选项做一下设置。
不加spacing的话x轴就不会断掉,只是group之间的间距小了一些

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 02:16