李志辉 Hui
【作者介绍】李志辉,长期从事各类统计软件应用研究,主编或参编SPSS、MINITAB、STATISTICA多个统计软件教材共8本。代表作:电子工业出版社《SPSS常用统计分析教程(SPSS 22.0中英文版)(第4版)》(2015年)。
什么?SPSS也能够编程?不是SAS、STATA、R等软件才能够编程吗?
答案是肯定的,SPSS的祖先(DOS版本)的所有功能都是利用命令语句实现的,SPSS的6.0版本采用Windows窗口界面,用户只需要用鼠标简单地点点点就可以完成复杂统计运算了,自此SPSS的编程功能逐渐被人遗忘了。有人喜欢用相机来形容各种统计软件,说SAS是单反机,SPSS是傻瓜机,真是太冤了,SPSS后续版本的编程功能不光没有弱化,而是不断地完善,功能越来越强大,一点都不逊逊于其他统计软件,而且还可以兼容时髦的R语言了。因此SPSS不光是一台简单易用的傻瓜机,更是一台功能强大的单反机,不信翻翻软件自带的命令语法手册(IBM SPSS Statistics 23 Command Syntax Reference),总共有2236页。当年洪楠教授编著的培训教材就是DOS版本的。
下面我用一个简单的例子介绍一下。
在临床研究中,我们常用的完全随机化设计,我们常用随机数字对病例进行分组。如研究对象共有60人,使用随机数字分组,可能分成例数分为别18、18和24的三组,这还还算是比好好的情况,有时可能会更糟糕。而且三组成员入组的时间也不一样,差距可能较大。此时,我们可以使用程序生成一组区组随机化编码即可简单的分组了。在SPSS的可以用一组命令即可一键生成区组随机化编码。具体操作如下:
首先,建立一个有60个个案的空数据文件。
运行如下程序,即可一键区组随机化编码,结果见下图。
DATASET ACTIVATE 数据集1.
COMPUTE ID=$CASENUM.
EXECUTE.
COMPUTE block=TRUNC(($CASENUM - 1) / 3 ) +1.
EXECUTE.
COMPUTE random=RV.UNIFORM(1,1984).
EXECUTE.
SORT CASES BY block(A) random(A).
COMPUTE inseq=MOD($CASENUM - 1,3).
EXECUTE.
SORT CASES BY ID(A).
删除其他变量,只保留ID和inseq两个编后,结果如下。
流水号(ID) | 顺序号(inseq) |
1 | 0 |
2 | 1 |
3 | 2 |
4 | 0 |
5 | 2 |
6 | 1 |
7 | 2 |
8 | 1 |
9 | 0 |
10 | 1 |
11 | 2 |
12 | 0 |
…… | …… |
有了这个区组区组编码后,按时间顺序,每三个研究对象1组,如第1组:第1对象进入对照组,第2个对象干预组1,第3个对象干预组2;如第2组:第1对象进入对照组,第2个对象干预组2,第3个对象干预组3;以此类推,不但保证每组个案在入组时间上保持了一致,样本量上也保证了一致。不出问题的话,都是20、20、20。
注:1、读者设定的初始例数应≥研究计划的例数,为了确保随机数的统一,建议用户可适当较大的初始例数,在研究中严格按照个案编码ID及组内顺序号inseq入组即可。
2、第6行、第14行的参数3为研究的对照组和干预组的总组数,如用于需要生成4组的区组随机化编码,将上述两行的参数3改成4即可。
总结:本例也可以使用菜单+窗口方式操作,但是需要调用4次COMPUTE程序,2次SORT程序才能完成,显然在这个案例上,使用命令语法是简单多了。
本文由微信订阅号“一起学SPSS”和“医学统计分析精粹”共同创作完成。