12358 8

[程序分享] 如何用SAS画森林图 [推广有奖]

  • 1关注
  • 1粉丝

小学生

85%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
64 点
帖子
6
精华
0
在线时间
7 小时
注册时间
2017-1-3
最后登录
2017-1-18

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
此处是同事倾情奉献的程序,用于画森林图,做出的图如下(宝宝一向觉得template画图选项太多,没sgplot简单)
捕获.PNG
程序如下:
  1. data _forest;
  2. input group1 $1-34  group2 $35.OR LowerCL UpperCL ;
  3. datalines;
  4. Age                                                                  0.999 0.992 1.006
  5. BMI                                                                  0.953 0.929 0.976
  6. Gender                            (Female)                           0.640 0.526 0.777
  7. Gender                            Male (control)                     .    .      .   
  8. Diabetes                          Yes                                1.120 0.956 1.311
  9. Diabetes                          No (control)                       .     .     .         
  10. Hypertension                      Yes                                1.079 0.903 1.294
  11. Hypertension                      No (control)                       .     .     .         
  12. Smoking status                    (Past smoker)                      0.935 0.768 1.138
  13. Smoking status                    (Current smoker)                   0.714 0.571 0.892
  14. Smoking status                    Non smoker (control)               .     .     .         
  15. Dyslipidemia                      Yes                                0.577 0.497 0.668
  16. Dyslipidemia                      No (control)                       .     .     .
  17. lipid lowering therapy            Yes                                3.540 2.879 4.388
  18. lipid lowering therapy            No (control)                             .      .     .         
  19. ;
  20. run;

  21. data _forest2;
  22. length  name1 $70.;
  23. set _forest;
  24. if group2^="Yes" then name1=strip(group1)||" "||strip(group2);
  25.         else name1=strip(group1);
  26. if or=.   then delete;
  27. or1='OR(95%CI)';
  28. CI=right(strip(PUT(OR,best.))||"("||strip(PUT(LowerCL,best.))||", "||strip(PUT(UpperCL,best.))||") ");
  29. run;

  30. *用于加annotation,出来的效果要自己酌情调整;
  31. data _f9_anno;
  32.    length function $4 color style $20 label $40;
  33.         retain width 40;
  34.    function="text";
  35.    color="black"; style="'Times New Roman'";
  36.    xsys='3'; x1=58;
  37.    ysys='3'; y1=98;
  38.    label='Hazard Ratio and 95% CI';
  39.    output;
  40. run;

  41. proc sgplot data=_forest2 sganno=_f9_anno noautolegend;
  42.   scatter y=name1 x=or / xerrorupper=UpperCL xerrorlower=LowerCL
  43.             markerattrs=graphdata1(symbol=squarefilled size=3);
  44.   scatter y=name1 x=or1 / markerchar=CI x2axis ;
  45. /*  scatter y=name1 x=or2 / markerchar=group1  ;*/
  46.   refline 1 / axis=x lineattrs=(pattern=shortdash) transparency=0.5;
  47.   inset 'Goal unachieved'  / position=bottomleft;
  48.   inset 'Goal achieved'  / position=bottom;
  49.   xaxis type=log offsetmin=0 offsetmax=0.35 min=0.1 max=5
  50.           minor display=(nolabel) ;
  51.   x2axis offsetmin=0.7 offsetmax=0.01 display=(noticks nolabel);
  52.   yaxis display=(noticks nolabel) offsetmin=0.071 offsetmax=0.035;
  53. run;
复制代码

xerrorupper& xerrorlower 功能同yerrorupperyerrorlower,只是一个是Y轴的上下限,一个是X轴的,symbol决定图标样式,size决定图标大小。markercharx2axis用于添加次级X轴的值。Refline用于指定中心,此图以1为中心,画虚线分隔,设置虚线透明度。Inset语句就是添加类似label的语句,可以调节位置。

此处几个offset语句,是用于调节X轴和Y轴的位置的,offsetmin,离左边的距离,offsetmax,离右边的距离,0.35,0.1都是距离的百分比。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:如何用 森林图 Transparency Diabetes function 森林图

已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
prince315 + 5 + 5 + 1 + 1 鼓励积极发帖讨论

总评分: 经验 + 5  论坛币 + 5  学术水平 + 1  热心指数 + 1   查看全部评分

沙发
sxbaby 发表于 2017-2-6 12:53:44 |只看作者 |坛友微信交流群
谢谢楼主分享

使用道具

藤椅
viviyeahyeah 发表于 2017-8-25 07:47:33 |只看作者 |坛友微信交流群
谢谢楼主分享

使用道具

板凳
一吴玉 发表于 2017-12-16 20:13:32 |只看作者 |坛友微信交流群
如果我想再加一列P值,程序该如何改动,多谢大神!

使用道具

报纸
一吴玉 发表于 2017-12-16 21:15:35 |只看作者 |坛友微信交流群
另外,左侧的分类条目怎么做成总类下面分条目的形式?

0HRZB(W)R7MGBEVI`Y%CNGV.png (9.71 KB)

0HRZB(W)R7MGBEVI`Y%CNGV.png

使用道具

地板
fybd88 发表于 2018-8-28 12:01:32 |只看作者 |坛友微信交流群
请问如何更改markerchar的字号

使用道具

7
周赳赳 发表于 2020-4-3 11:00:44 |只看作者 |坛友微信交流群
想问下 置信区间两边的小竖线 是什么选项 我做出来的就没有竖线

微信截图_20200403110027.png (6.95 KB)

微信截图_20200403110027.png

使用道具

8
LWZQYC 学生认证  发表于 2020-11-25 14:36:15 来自手机 |只看作者 |坛友微信交流群
楼主没看到代码啊

使用道具

9
萌新2号 发表于 2021-1-3 21:13:56 |只看作者 |坛友微信交流群
你这不是森林图吧,你这只是简单的罗列了各个指标的OR(95%CI),并没有包含合并的OR(95%CI)和p值呀

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 16:37