新药临床试验统计分析中计量资料的SAS宏实现 联系客服

发布时间 : 星期四 文章新药临床试验统计分析中计量资料的SAS宏实现更新完毕开始阅读2d729290dd88d0d233d46a9b

新药临床试验统计分析中计量资料的SAS宏实现

王媛媛 孙瑞华*

摘要 应用SAS程序进行新药临床试验统计分析的过程中,往往需要对SAS结果进行选择性的输出,现基于新药临床试验统计分析中常见的计量资料的成组检验,设计和编写了综合了成组t检验和成组设计的两样本比较秩和检验的SAS宏程序,并利用实例介绍了SAS宏程序的调用方法和各部分参数的具体含义,以达到降低统计人员的工作量,提高统计分析工作的效率和质量,保证结果的真实性和准确性的目的。

关键词 临床试验;计量资料; SAS宏;

作者单位:100029 中日友好医院

通讯作者:孙瑞华 Email:sunruihua@263.net 通讯地址:100029 北京市朝阳区樱花东路2号中日友好医院科研处

在新药临床试验中,研究的变量主要分为定量资料、定性资料和半定量资料也就是平时常说的等级资料三种。对于计量资料,常用的统计学方法是成组t检验和成组设计的两样本比较秩和检验。如果试验组与对照组的资料均来自正态总体,且方差齐性用t检验,如果试验组与对照组的资料均来自正态总体,但是方差不齐,则用Satterthwaite方法进行的校正t检验。如果试验组与对照组的资料有一组不符合正态分布的时候,就要应用非参数检验,即成组设计的两样本比较秩和检验。

国内外多数统计中心,应用SAS(Statistical Analysis System)软件对新药临床试验的数据进行统计学分析,SAS软件具有强大的数据分析处理能力,但是也有其不足的一面,我们运行一般的过程步以后,会在输出窗口输出大量的信息,我们需要从这些庞杂的结果数据中挑选出自己所需要的结果,以成组t检验为例,判断两组资料是否来自正态总体,要判断中正态性检验的结果(Test For Normality)概率P是否大于临界值0.05,然后再判断方差齐性检验结果(Equality of Variances)概率P是否大于临界值0.05,最后才能判断读取t检验或校正t检验的概率值。这样无疑会增加统计人员的工作量,降低工作效率。SAS宏(SAS Macro)能减少普通工作文本输入量的SAS工具[1],并且能通过SAS宏编程对结果进行选择性的输出,利用SAS宏自动实现对试验组与对照组资料的正态性检验和方差齐性检验。 1

SAS宏编写的一般原则及SAS程序

编写SAS宏模块并不是一个复杂的过程,邹建东[2]等人编写过正态分布定量指标统计分析报告的SAS宏程序,且具有简单易懂的特点,因此本文主要借鉴邹建东编写SAS宏模块的一般原则,具体描述如下:通过SAS中新增加的结果传递系统(Output Delivery System,ODS)将成组t检验(ttest)和成组秩和检验(npar1way wilcoxon)过程步的结果输出到指定的数据集中,将这些数据集和描述性结果输出的数据集合并为一个总的数据集,在总的数据集中进行正态分布判断和方差齐性判断并输出最后的统计量和概率P值。 1.2 SAS程序

1、定义宏名称和宏变量

1

1.1 统计分析中计量资料SAS宏模块编写的一般原则

jiliang为宏名称,宏变量中database表示的数据集的名称,var为需要分析的变量名称,index为变量名的标签。

%macro jiliang (database,var,index); 2、宏程序块内容

/*将univariate normal过程步的描述性统计结果和正态性检验的结果输出到到result数据集中*/ proc univariate normal noprint data=&database; var &var; by group;

output out=result n=n mean=mean median=med std=std min=min max=max nmiss=nmiss PROBN=Pnor; /*将A、B两组描述性统计和正态性检验的结果分别输出到a,b两个独立的数据集中,并定义变量的长度*/

data a(where=(group=\set result;

format mean 6.2 med 6.2 std 6.2 Pnor 18.2;

/*将a,b两个独立的数据集,根据不同的组别将结果重新命名,合并为一个result数据集中*/ data result(drop=group);/**/

merge a(rename=(n=NA nmiss=MA mean=MeanA med=medA std=StdA Min=MinA Max=MaxA Pnor=PnorA))

b(rename=(n=NB nmiss=MB mean=MeanB med=medB std=StdB Min=MinB Max=MaxB Pnor=PnorB)); Variable=\

/*利用ODS输出t检验结果数据集Ttests和正态性检验结果数据集Equality */ ods listing close;

ods output TTests=TTests Equality=Equality ; proc ttest data=&database; var &var;class group; run; ods listing;

/*合并数据集Ttests、Equality和result到一个数据集中test1*/ data test;

merge Equality TTests result; by Variable;

/*生成正态且方差齐性的成组T检验的数据集,并定义变量格式*/ data test1; set test;

where PnorA>0.05 and PnorB>0.05 and ProbF>0.05 and Variances=\length stat $ 15; stat=\

2

/*生成正态但方差不齐的成组T检验的数据集,并定义变量格式*/ data test2; set test1;

where ProbF<0.05 and Variances=\length stat $ 15; stat=\’ \

/*合并成组T检验的数据集,并定义变量的长度*/ data test(keep=tValue Probt stat); merge test1 test2; tValue=abs(tValue); format tValue 6.2 Probt 6.3;

/*利用ODS输出秩和检验结果数据集WilcoxonTest*/ ods listing close;

ods output WilcoxonTest=WilcoxonTest; proc npar1way wilcoxon data=&database; var &var;class group; run; ods listing;

/*将秩和检验中的Normal Approximation 结果Z值和双侧检验概率输出到wilcox1数据集*/ data wilcox1; set WilcoxonTest;

if Name1=\ or nValue1=\then delete; Variable=\run;

/*将秩和检验结果和描述性统计的结果输出到wilcox2数据集*/ data wilcox2;

merge wilcox1 result; by Variable;

/*生成成组设计的两样本比较秩和检验的数据集*/ data wilcox21(keep=Name1 cValue1 stat); set wilcox2;

where PnorA<0.05 or PnorB<0.05; length stat $ 15; stat=\

data C(where=(Name1=\

3

set wilcox21;

data wilcox22(keep=cValue1C cValue1D statC);

merge C(rename=(Name1=Name1C cValue1=cValue1C stat=statC)) D(rename=(Name1=Name1D cValue1=cValue1D stat=statD)); /*根据t检验与秩和检验的不同结果设置输出格式*/ data _null_;

merge result test wilcox22;

if PnorA>0.05 and PnorB>0.05 then do; file print notitle; put #1 @3 \

#2 @5 \例数(缺失)\ @60 stat '=' tValue @80 'P=' Probt

#3 @5 \均数±标准差\'StdA @42 MeanB'±'StdB #4 @5 \中位数\ #5 @5 \最大值\#6 @5 \最小值\end;

else if PnorA<0.05 or PnorB<0.05 then do; file print notitle; put #1 @3 \

#2 @5 \例数(缺失)\@60 statC '=' cValue1C @80 'P=' cValue1D

#3 @5 \均数±标准差\'StdA @42 MeanB'±'StdB #4 @5 \中位数\ #5 @5 \最大值\#6 @5 \最小值\end; run;

%mend jiliang; 2

利用实例调用宏程序

假设新药临床试验的全分析数据集为datafas,现要对体重和症状得分进行组间比较,变量名称为WEIGHT(体重)和ZFS(症状评分),调用SAS宏的程序和输出结果如下: %jiliang(data,XINLV,心率); %jiliang(data,WEIGHT,体重); 心率

例数(缺失) 103 (0 ) 106 (0 ) t_value =0.23 P=0.816

4

均数±标准差 79.64 ±11.25 80.01 ±11.65 中位数 80.00 80.00 最大值 120 110 最小值 53 50 体重

例数(缺失) 100 (0 ) 105 (0 ) Z_Wil =0.5913 P=0.5543 均数±标准差 59.62 ±8.60 58.84 ±8.10 中位数 60.00 60.00 最大值 85 75

最小值 41 42

结果显示:心率符合正态分布且方差齐,t检验结果两组差别无统计学意义,体重试验组与对照组的资料至少有一组不符合正态分布,秩和检验结果,两组整体分布无统计学意义。 3

讨论

新药临床试验的统计分析过程的质量和规范程度直接影响到药物临床疗效的分析结果,按照以往先编写SAS程序,再选择相应的SAS结果手动生成报表的过程,有两个缺点:一是会增加统计人员的工作量且容易出现错误;二是可重复性较差,如果一旦出现全分析数据集(FAS,Full Analysis Set)、符合方案数据集(PPS, Per-Protocol Set)或安全性数据集(SS, Safety Analysis Set)变更的情况,统计人员需要重新选择SAS结果进行制表。另外,通过调用ods rtf和proc report 等语句编写的SAS宏程序可以将结果数据集直接输出为word文档数据报表的格式。

从本文的实例中我们可以看出,宏程序的原理就是通过组合多个SAS过程步形成一个功能强大的sas宏。宏程序%jiliang的最大的功能特点就是省去了统计人员从大量的SAS结果中人为地判断正态性以及方差齐性的工作,将两组定量指标进行统计描述与假设检验常用的统计分析结果即成组t检验和成组设计的两样本比较秩和检验的统计量和概率P值直接输出到output窗口供统计人员使用。对于定量资料的协方差分析,定性资料的四格表或是多行多列表也可以通过编写SAS宏并直接调用的方式来实现,以达到降低统计人员的工作量和避免人为读取结果数据产生的错误,提高统计分析过程的工作效率和质量,保证结果的真实性和准确性的目的。

参考文献

1. 高惠璇等.SAS系统 Base SAS软件使用手册[M].北京:中国统计出版社,1997.

2. 邹建东,熊宁宁,卜擎燕等.正态分布定量指标统计分析报表的SAS宏程序[J].中国临床药理学与治疗学,2004,9(7):838-840.

5