多图预警:如何又快又美地用SAS画各种统计图形?

专题合集更多教程

文章来源: “统技思维”公众号 (微信号:StatsX)。感谢作者授权。

 

首先,来一些铺垫。

 

我个人认为秘诀就在这ODS Graphic System里。如果你以前用SAS/Graph模块,转ODS Graphic System吧;如果你以前没用过SAS/Graph模块,那更好,直接来看看如何用ODS Graphic System来玩转各种统计图形。

 

在ODS Graphic System中,有一个像杜十娘百宝箱一样的Procedure,她的名字就叫Proc Sgplot。常见的统计图形,她几乎都能给我们快速的倒腾出来。在开扒之前,先介绍下Proc Sgplot的构造。

 

最基本的Proc Sgplot就是一个三段式的夹心饼干。首先是报过程名和数据集名;结尾「run;」申明完成任务;中间的夹心奶油就是告诉SAS你要画什么图。当然,可以配合其他一些语句和选项做些点缀和修饰。

 

proc sgplot data=dsname; 

      plot statement/option;  

run;

 

这其中plot statement最重要,一种图形换一个plot statement即可:例如,直方图就用histogram语句,竖条图就用vbar语句。泡泡图就用bubble语句,等等。想再叠加一种图形,那就再加一个语句即可 :例如,已经用scatter语句画了散点,想加回归线,那就再加一条reg语句。sgplot目前已提供的plot statement已超过30多个。以下是sgplot的plot语句不完全列表,具体可查看help。

 

OK,铺垫完了,接下来,别说话,看图!我们一个一个来开扒!为了行文紧凑,仅就直方图的例子给出核心代码,后续的图只点出主要语句,完整代码可回复关键词后集中查看。

 

1.直方图

 

查看连续变量的分布情况,频率分布直方图。直接上histogram语句就行。

举个例子,要画一个简单的直方图,只要如下三行:

 

proc sgplot data=sashelp.cars ;

         histogram  enginesize;

run;

 

有时候,我们希望加一条密度曲线,此时再上一个density语句就行。

 

proc sgplot data=sashelp.cars ;

         histogram  enginesize;

         density enginesize;

run;

 

有的时候,我们希望把两个类似变量的直方图放一张图里比较,如何做?同理,那就再加一个histogram语句!

 

proc sgplot data=sashelp.cars;

  histogram mpg_city ;

  histogram mpg_highway ;

run;

 

SAS的默认配图颜色比较老陈晦暗,给她换一个配色方案,立马变成活泼明快风。

 

此外,直方图还有一个有意思的变种,叫金字塔图,或者叫镜面图直方图,蝴蝶图?这个需要一点GTL的技巧。详见 Graphically Speaking博客。

 

2. 箱线图

 

同样查看连续性性变量分布情况,箱线图给出了更为简洁且丰富的概要信息,而SAS所需的,只要一个vbox或者hbox语句。其中v表示vertical, h表示horizental。类似的还有vbar或者har语句。

 

如果有分组信息,那就在语句后加一个分组选项「/group=groupvar」,SAS会自动以不同的pattern区分。

 

3. 直条图

 

长得和直方图类似,但是直条图通常是用于类别/组间统计量的比较。此时,vbar或者hbar语句就可以派上用场了。

 

同理,如果有分组信息,那就在语句后加一个分组选项「/group=groupvar」即可。

 

很多时候,为了了解数据的变异情况,我们还需要其加上误差棒。此时,limitstat选项就可以上场了。

 

如果分组,分类比较复杂,那就需要借助proc sgpannel里的panel by语句了。

 

此外,直条也可以做镜面直条图。不必通过GTL编程,只需要借助proc sgplothbarparmvbarparm以及formart技巧。

 

4. 直条线图

 

直条图还经常和线图组合成直条线图。此时,可以设置第二y轴,再加一条vline语句画线图。

 

5. 散点图

 

考察两个变量的关系,做相关和回归前的探查,都可以用scatter语句来描绘散点图。欲分组查看,加一个分组选项「/group=groupvar」即可。

 

更多时候,我们希望在散点图中增加回归线,查看回归趋势。此时,只要再给SAS一个reg语句就OK。还可以用CLI,CLM查看置信限。同理,欲分组查看,加一个分组选项「/group=groupvar」即可。

 

 

6. 矩阵图

 

把散点,直方图放在一个组图里,组合成一个小矩阵。这就是proc sgscatter的事了。

 

7. 折线图

 

查看变化趋势。sgplot里的series即可。但往往仅有点估计是不够的,于是要加上标准差,此时需要highlow语句的配合。不过,数据需要先通过proc means处理,计算均数和标准差。

 

8. ROC曲线

 

熟悉的不能再熟悉的ROC曲线,其实Proc logisitcplot=(roc)选项就可以做到。当然,也可用更直接的用其ROC语句,还可以用roccontrast来进行ROC曲线的比较。

 

9. K-M曲线

 

生存分析里的K-M曲线,其实Proc lifetestplots=survival选项即可实现。其中survial的亚选项更为丰富,不仅可以实现画生存曲线,也可以画死亡曲线;不仅可以画点估计值,也可以画置信区间。

 

不仅如此,期刊中常见的No. at risk已经log-rank检验的P值也可以直接在图上体现。

 

10. 泡泡图

 

平面化的三维图形。proc sgplotbubble语句的专利。欲分组查看,加一个分组选项「/group=groupvar」即可,当然,还可用reg语句增加回归线。

 

11. 森林图

 

森林图不仅仅是在Meta分析中大行其道,在各种带OR, HR值的分析中,也全是她的身影。森林图由于结合了文字和图形,在制作过程中较为复杂,需要GTL编程。

 

直接用OR值绘制森林图

 

Logistic回归结果改造的森林图

 

12. 裂轴图

 

经常是数轴虽然等距,但是中间的数值其实被砍去一大截,以节省绘图空间。如下图y轴,0~50和50~60在数轴上等距,但是真实数据差了4倍。所以用「//」标示数轴有间断。这种图的绘制,也需要GTL编程。

 

当然,除了以上图形,sgplot还有其他许多应用。此外,ODS Graphic System的其他过程如SGpannl , SGDesign,SGRender都有应用。当然,SAS默认的绘图风格比较老陈晦暗,后续还可以做一定的美化,这就是下次推送的内容啦。

 

为了兼顾行文紧凑,图中的代码只做简要提示,欲获取完整代码,可关注“统计思维”公众号,在后台(不是评论区)回复「gCode」

扫码关注“医咖会”公众号,及时获取最新统计教程!

描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
提交问题
我要提问
描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
提交问题
描述问题
选择一个标签 (请选择一个与您问题最相符的标签)
    提交问题