精密度实验变异系数计算的SAS宏程序

来源:岁月联盟 作者:谢绍锋 陈炯华 时间:2010-07-12

【摘要】    评价实验室检测结果的准确性和稳定性,需要进行精密度实验,以确定检测结果是否处于所控制的范围内。通过精密度实验批内、批间、天间以及总的变异系数,能够反映实验仪器精密度好坏。通过编写SAS宏程序,可以应用SAS统计软件直接输出以上变异系数的统计报表。

【关键词】  精密度实验; 变异系数; 统计分析报表; SAS宏程序

  1  精密度实验
   
  评价医院实验室检测结果的准确性和稳定性,需要进行精密度评价实验,以确定检测结果是否处于所控制的范围内。精密度实验通常包括批内、批间以及日间重复实验。对同一批次质控标本的重复测定,要求每天在不同时间点测定同一批次质控标本2次(2次测定间隔不得少于2小时),为批内重复实验;每次测定均做不同批次质控标本双份,为批间重复实验;一般要求连续测定20天,为天间重复实验,这是对检测系统天间不精密度的观察。
   
  对精密度实验结果进行统计分析,反映实验仪器精密度好坏的指标是变异系数(CV)。CV越小精密度越好,反之则差,故也称其为不精密度。通常按以下公式可以计算出批内、批间、天间和总CV,其中总CV最重要,它代表整个分析体系的可重复程度。
   
  S批内=?ni=1 ?2j=1 (Xij1-Xij2)24n
   
  式中:S批内为批内标准差;n为实验天数(n=20);i为第i天(1~20);j为1天内的批数(1或2);xij1为第i天第j批的第1个结果;xij2为第i天第j批的第2个结果。
   
  A=?ni=1 (Xi1-Xi2)22n
   
  式中: A为批间差异水平;Xi1为第i天第1批的结果均数;Xi2为第i天第2批的结果均数。
   
  B=?ni=1 (i-)2n-1
   
  式中:B为天间差异水平;i为第i天的结果均数;为所有实验结果均数。
   
  S总=2B2+A2+S2批内2
   
  式中:S总为总标准差。
   
  CV总=S总/
   
  式中:CV总为总变异系数;S总为总标准差;为所有实验结果均数。

  2  编写SAS宏程序
   
  为直接得到如表1所示统计分析报表,编写以下SAS宏程序。数据集名为&database,统计变量为&var,其中第1批2次测定数据结果分别为&var.1和&var.2,第2批2次测定数据结果分别为&var.3和&var.4,输出总变异系数的数据集名为&dataout。

  表1  精密度试验变异系数统计分析(略)

  2.1  定义输出表的格式

  %macro tformat; /*定义宏,输出统计报表的格式*/

  proc format;
  
  invalue g
   
  1=20
   
  2=40;

  %mend tformat;

  2.2  计算变异系数
   
  调用proc univariate过程计算批内标准差s、批间差异水平a、天间差异水平b和所有实验结果均数x,利用公式计算出总的变异系数CV。

  %macro cv(database,var,dataout); /*定义sas宏程序cv*/

  data data1;

  set &database(keep=&var.1 &var.2 &var.3 &var.4);
  
  d1=(&var.1-&var.2)**2+(&var.3-&var.4)**2;

  proc univariate normal noprint;

  var d1;

  output out=d1 sum=sum n=n;

  data s;

  set d1;

  s=sqrt(sum/(4*n)); /*取平方根值,得到批内标准差s*/

  run;

  data data2;

  set &database(keep=&var.1 &var.2 &var.3 &var.4);
  
  d2=((&var.1+&var.2)/2-(&var.3+&var.4)/2)**2;

  proc univariate normal noprint;

  var d2;

  output out=d2 sum=sum n=n;

  data a;

  set d2;

  a=sqrt(sum/(2*n)); /*取平方根值,得到批间差异水平a*/

  run;

  data data3;

  set &database(keep=&var.1 &var.2 &var.3 &var.4);
  
  d3=(&var.1+&var.2+&var.3+&var.4)/4;

  proc univariate normal noprint;

  var d3;

  output out=b std=b mean=x; /*生成天间差异水平b和所有实验结果均数x*/

  run;

  data cv;

  merge s(keep=s) a(keep=a) b(keep=b x);
  
  cv=sqrt((2*(b**2)+a**2+s**2)/2)/x;

  run;

  data &dataout;

  set cv(keep=s a b cv) nobs=nobs; /*合并数据集,其中包含s,a,b*/

  nu=nobs;

  s=100*s; /*由于变异系数通常用百分数表示,因此,将所得到的值乘以100*/

  a=100*a;

  b=100*b;

  cv=100*cv;

  run;

  proc datasets;

  delete data1 data2 data3 d1 d2 s a b cv; /*删除程序中生成的临时数据集*/

  quit;

  %mend cv;

  2.3  定义输出结果的位置
   
  定义宏FC,输出批内标准差s、批间差异水平a、天间差异水平b和总的变异系数CV的位置。

  %macro fc(invar,cvar,p);

  if &invar then do;
   
  if inds=1 then do;
   
  row+&p;
   
  put #row @4 "&cvar" @22 s 6.2 '%' @34 a 6.2 '%' @50 b 5.2 '%' @64 cv 5.2 '%'
         
  #(row+1) @2 75*'-';
   
  end;
   
  if inds=1 then  inds=0;

  end;

  %mend fc;

  定义宏nullset,产生一个输出表,集成已产生的批内标准差s、批间差异水平a、天间差异水平b和总的变异系数CV,并按定义排列。将输出表存入d盘sas目录下,文件名为&tab的文本文件,&tab为宏变量。

  %macro nullset(data);

  data _null_;
   
  file "d:\sas\&tab..txt" print n=ps notitles header=head;
     
  set &data;
   
  inds+1;
   
  col=input(g,g.);

  %mend nullset;

  2.4  运行宏程序
   
  将以上SAS程序提交SAS系统运行,即可自动生成统计分析表1。其中数据集名为main,变量名分别为high、mid、low。

  %let tab=表1; /*将宏变量&tab赋值为表1,即生成的文件名为:表1.txt*/

  %tformat; 

  %cv(main,high,fhigh);

  %cv(main,mid,fmid);

  %cv(main,low,flow);

  %nullset(fhigh(in=fhigh) fmid(in=fmid) flow(in=flow));

  %fc(fhigh,全血高切粘度值,2);

  %fc(fmid,全血中切粘度值,2);

  %fc(flow,全血低切粘度值,2);

  2.5  其他辅助程序

  /*定义输出表的表头*/

  return;

  head:
  
  put # 2 @10 "&tab 精密度试验变异系数统计分析"
        
  # 3 @2  75*'-'
        
  # 4 @6 '检测指标' @20 '批内变异系数' @34 '批间变异系数'  @48 '天间变异系数' @62 '总变异系数'
        
  # 5 @2 75*'-';

  row=6;

  return;

  run;

  /*将d:\sas\&tab..txt文件在PGM窗口输出*/

  %macro dminc( );

  Dm"inc'd:\sas\&tab..txt'";

  run;

  %mend dminc;

  %dminc;

  3  讨论
   
  精密度实验是实验室进行质量控制经常采用的方法,其数据统计分析较多采用Excel2000等软件进行,对批内、批间变异系数比较方便容易,但对总变异系数的计算往往比较困难,而且常常需要人为转抄为word文档,容易出现错误。SAS统计分析软件是当前国际上最流行、并具有权威性的统计分析软件,目前在我国临床药物研究领域应用较为广泛。我们通过编制SAS宏程序,直接由SAS系统计算得到总变异系数,并输出简明的统计分析报表,减少了人为转抄产生的错误,保证结果的真实准确性。对于精密度实验其他检测指标的统计分析,只需要在SAS宏程序中对变量名进行相应的修改,就能够方便地得到统计表,减少分析处理时间。

【】
    1 高慧璇,李贵斌,耿直,主编.SAS系统Base SAS软件使用手册.北京:统计出版社,2001.

  2 董新元,张高魁,姚晨.新药临床试验中定量指标的SAS统计报表.军医进修学院学报,2005,26(1):71~72.

  3 胡良平,主编.统计学与SAS应用.北京:军事医学出版社,2000.