哈尔滨医科大学卫生统计学教研室(150081) 张雷 吴莹 侯艳 李康
目前我国的临床试验统计分析工作,通常由具有临床试验经验的统计人员通过SAS软件实现并给出统计分析报告。对于重要的研究结果,若能在统计分析报告中恰当配合统计图形则更便于对结果的理解和解释〔1〕。在SAS系统中,SAS/GRAPH作为专门的图形可视化模块具有十分强大的图形表现功能,利用图形功能可以在数据分析的同时更好地展现数据特点和相互之间的关系。SAS/GRPAH中提供了大量的图形选择和相应的选项,通过修改控制图形的选项之后,可以生成各种图形。然而,编制通用和具有特点的SAS绘图宏程序,通常需要花费较多的时间。由于R语言在实现画图上具有更好的灵活性,如果能在SAS系统中实现对R语言画图程序的调用,则很容易实现由SAS宏给出的表格与图形相结合的统计分析报告。
相对于其他统计分析软件,R语言的一个重要特点是灵活的绘图功能。首先,R语言绘制的图形具有高印刷质素,通过tiff()等语句可在程序中实现高质素图像的生成与保存。其次,可以在图形中加入特殊的数学符号或公式,这是R语言的一大特色。再次,R语言通过高级绘图命令与低级绘图命令的结合,可以在程序中灵活地实现对坐标轴、各级标题及图例等的编辑工作,也可以在图形上添加额外的数据点,参照线或者文字标签等,能够满足统计图形绘制的各种要求。最后,基于R语言的开源与自由下载特性,软件更新较快且具有丰富的网上资源,通过下载安装各种程序包可以绘制许多特殊图形〔2〕。综合来看,R语言可以通过简单灵活的程序控制语句,实现极强的绘图功能,生成高质素图形文件,并且完全通过程序语句实现,这些均有助于临床试验中包含图形结果的统计分析报告的自动化生成。
将原始数据整理为绘图所需的数据格式后,利用SAS导出外部文件数据集功能,将整理完成的数据集输出为一个“.csv”文件。应用 R程序绘图时,读入刚刚输出的“.csv”文件数据即可直接进行图形的绘制。SAS可以通过MS-DOS命令实现对R的调用和运算。SAS调用MS-DOS的语句主要有:X command;CALL SYSTEM routine;Batchprocessing;SYSTASK statement;%SYSEXEC statement。本文主要涉及 X command和CALL SYSTEM routine这两个命令。X命令是全局通用语句,可以在任意位置使用,但在数据步中不能使用条件语句来执行X命令;而CALL SYSTEM语句必须在数据步中执行,是可执行条件语句。这两个语句默认是进行同步执行,这意味着在继续执行SAS会话之前,DOS命令窗口和windows应用程序的执行需要引导。我们需要将程序存储为扩展名为“.bat”或“.r”的文件,最后利用MS-DOS语句运行即可,运行后输入EXIT可以返回SAS会话窗口。
虽然SAS通过MS-DOS命令可以实现对R程序的调用,但由于SAS软件窗口无法显示R绘制出的图形,若手动查找R输出的图形文件就失去了使用这一方法的意义。为了解决这一问题,在编写SAS宏程序之前,可定义一个固定的文件输出路径及图像文件格式作为全局SAS宏参数,方便每一次调用。SAS窗口虽不支持外部图像的显示,但SAS命令可以利用windows操作系统直接打开一个外部文件,其命令语句格式为“dm’wbrowse”()“’”。这样便可以在SAS调用R程序绘制图形后,直接打开所绘制的图形。图形输出到统计报告中,可以利用SAS语言中的ODS命令来实现〔3-4〕。
图形编译完成后,使用sink(“<路径\output.txt>”)命令保存R程序的输出结果,并在SAS程序中读入该文件,同时使用SAS中的preimage命令读入外部图像文件,最后利用SAS ODS将图形输出至一个已存在的Word文档中。将图形结果输出至Word文档的SAS宏程序具体实现过程:
我们利用SAS语言完成了部分临床试验统计分析报告需要的图形宏程序〔5〕,具体内容见表1。
表1 临床试验统计分析主要图形SAS宏程序列表
利用SAS调用R软件绘制所需统计图形,并将结果自动输出至统计分析报告,实现步骤如下:
(1)首先整理出所需数据集,存放至目标位置;
(2)通过file语句和put语句,将绘制所需图形的R程序输出至目标位置的“.R”文件;
(3)利用SAS系统的X语句完成以下操作:①启动R软件;②调用(2)中生成的“.R”程序文件绘制所需图形,并将结果存放至目标位置;③退出R软件,返回SAS系统实现上述步骤的通用宏程序:
(4)通过SAS ODS将(3)中绘制的图形传输至word文档格式的统计报告中,实现统计报告中图形结果的自动化输出。
以下给出几种常见统计图形,说明上述步骤的SAS实现语句。
主要功能:直观地显示不同处理组的某一阳性事件的发生率,如比较试验组与对照组治疗高血压的疗效。SAS实现步骤:
图1 实验与对照组治疗高血压疗效对比条形图
主要功能:直观地显示不同处理组的各症状在用药前后的改善率,如比较试验组与对照组治疗感冒各项症状的有效率。
SAS实现步骤:
图2 感冒胶囊用药4天后与对照药物各症状改善百分率(%)
主要功能:直观地显示不同处理组的有效率或某一阳性事件的发生率,如试验组和对照组血压的平均变化情况的误差条图。
SAS实现步骤:
图3 实验组和对照组血压的平均变化情况的误差条图
主要功能:用于非正态计量数据的统计描述,如试验组与对照组服药6周后的坐位血压值的中位数及百分位数。
SAS实现步骤:
图4 不同用药时间的坐位血压变化情况箱式图
主要功能:描述不同试验中心的有效率及区间估计,同时给出总有效率的可信间,可用于直观地显示不同中心试验结果是否具有一致性。如各中心试验组与对照组显效率对比的森林图。
SAS实现步骤:
图5 各中心实验组与对照组显效率对比森林图
主要功能:描述一组或两组计量指标的频数分布,既可以用于比较试验组和对照组的数量值的分布,也可以用于描述同一组试验对象用药前后的终点指标的变化情况。如试验组与对照组6周后坐位血压变化值对比图。
SAS实现步骤:
图6 实验组与对照组6周后坐位血压变化值对比图
主要功能:用于比较不同处理组间某连续变量的变化趋势差异。如患者在治疗6周过程中血K+的变化图。SAS实现步骤:
图7 患者在治疗6周过程中血K+的变化
SAS语言和R语言作为两种不同的常用统计分析和编程工具,各有其独特之处。从应用上讲,SAS语言更适于数据管理和统计分析,R语言在绘图上更为简单。为实现统计分析报告图形的自动化输出,我们可以结合两种软件各自的优点进行混合编程,即在SAS系统上通过MS-DOS命令调用R软件绘制统计图形,再利用SAS ODS功能将图形结果直接输出至Word格式的统计分析报告中,直观地显示分析结果。本文结合新药临床试验中可能用到的图形,如箱式图、误差条图、百分条图、点线图等,说明了具体的混合编程方法,给出了通用性的SAS宏程序。按照本文给出的方法亦可根据实际需要给出其他图形。
1.童新元,张高魁,姚晨.定性指标的SAS统计分析报表_SAS软件在新药临床试验统计分析中的应用.中国卫生统计,2011,20(1):50-51.
2.Norm Matloff.Rough guide to R,2011.
3.SAS BASE 使用手册,2011.
4.SAS Institute Inc.Step-by-Step programming with base SAS software.Cary,NC:SAS Institute Inc,2001.
5.甘秀敏,蔡强,聂绍发.多变量重复测量方差分析统计报表输出的SAS 宏实现.中国卫生统计,2012,29(1):142-144.