学系列教韦 第十三章 使用SPSS软件对事件史 原始数据进行预处理 在第十二章中,我们对事件史分析的基本概念和模型作了介绍。 但在事件史分析的实际操作中,研究人员常常发现数据预处理是一项很麻烦 的工作。在应用其他分析方法时,输入的数据资料都往往已经具备相当标准化的 格式,无需再进行处理。与此相比,应用事件史分析的实际数据格式却往往因不 同的调查、不同的专题而有数据格式方面的很大差别。当然,研究人员可以使用 些编程语言如C、 FORTRAN、 PASCAL等程序将原始数据加工为他们所需要 的格式,但是这项工作往往需要研究人员具有这些编程语言的专门知识,有时甚 至需要专业程序员才能完成这项工作。所以,我们经常遇到这种情况,应用事件 史分析方法的研究人员并不太了解编程工作,他们希望能用比较熟悉的统计软件 的命令将实际拥有的数据改造为一定的格式。 本章的目的就是介绍如何应用SPss统计软件包中的编程语言来完成十分复 杂的数据格式加工的工作。我们将主要讨论在事件史分析中经常遇到的两个方面 的数据处理问题:一个是如何计算生存持续期;另一个是如何将调查数据由以案 例为单位的格式改变为以一定时间为单位的格式。本章将用五个例子来示范运用 sPSs编程进行数据处理的技术。理解和掌握这五个例子将会十分有助于那些准 备应用SPSS软件编程来进行数据处理的研究人员。同时,这些例子对于那些熟
识SAs和BM的用户也会有所启发 下面,我们的讨论将从不同输入数据的类型及相应的编程语言开始 输人数据类型 事件史数据有时也称为生命时间( lifetime)、生存时间( survival time)或失败时 间( failure time)。总的来说,它们都是关于某一事件是否发生和何时发生的信息。 如果这一事件在研究者结束观察时还没有发生,我们就说这一案例被删截了(cm red)。几乎所有的事件史数据都是与时间相连的。当事件的自变量随时间过程 而发生变化,我们称其为随时间变化( time-varying)或“动态变量”与此相对, 在常规横贯研究中使用的大多数据在不同时间上是固定不变的(tin-fixe),或称 之为¨静态变量¨”它们或者是个人或葉体在某一时点上的静态状况、或者是在时 间过程中固定不变的情况。纵贯数据可以取自不同的来源但是固定案例的追踪 调查和时点调查屮询问历史回顾问题是较为常见的纵贯数据来源。 随时间变化的信息可以按两种形式记录于资料之中,它们或者是按¨记录¨ ( record)进行排列(在资料中以行的形式出现),或者是按“变量”( variable) 进行排列(在资料中以列的形式岀现):棖据硏究设计的需要,每个案例的时间 (或变量)的记录数量既可以是相等的,也叮以是不相等的。我们可用下亩一些 例子来说明输入数据在格式类型方面的不同之处。 1.用变量编排时间信息,时间变量的个数随案例而变化 表13-1数据来自生育率调查,事件定义为仕育。 表13-1 固定变量 随时间变化的变量 A(正FDUC(EB 每个孩子的出生H 42 651201 680l0 70020)9 )02 600 790303 820530) 850416 注:I为案例编码;N(正为在调查时的年龄:EDLC为教育程度;这些均为背景资料变量:后面是 每个孩子的出生日期.每组数据共6位数,每2位数依次分别表示年、月、日由各案例所生 ∫女数量不同,因此其数据长度是不同的。如第·个案例生育过次,第一次在1%65年12月1 第二次在968年1月1.第三次在190年2月9日。而第¨个案例只生育过·个孩子 出生目期为1985年3月12日 424
2.用个数相等的时间变量编排时间信息并以编码标志事件发生 表13—2数据中的事件定义为工作单位变换 表13-2 固定变量 随时间变化的变量 ID AGE SEX EDU M1 M2 M3 M. M58M59M60 0 0 0 6003823 0 0 :每一个调査对象在五年期间按月进行是否发生变换Ⅰ作单位的事件记录。用6个虚拟编码变量 (M)来表示事件在每个月当中是否发生,如发生则赋值1,没有发生则赋值O 3.用记录编排的时间信息、时间记录不等量 表13--3数据中的事件定义为安置儿童的居所变化 l3-3 固定变量 随时间变化的变量 l1)SEYA( F. RACE… FUNDS 850I0l 002 881023 02 890204 02 890)905 880305 6(0 注:N正—孩∫第次送往亲戚家或幼儿园时的年龄:D)AIE—送往居所的开始臼期 LIVARK—居住安排;FU、I一居住安排的资金来源 4.用记录编排时间信息、等量的时间变量 表13-4数据中的事件定义为生理试验观察
13-4 固定变量 随时间变化的变量 B TREAT SYMPTOM 444 001 3332 232 2222 3 002 002 f00 600 3333 23223332323 600 2 注:在四个时点对对象进行观察:Bl、B2、B3等是一套关于背景情况的变量;TKEI是对于试验处 置的测量(比如用药量); SYMPTOM是疾病症状的测量 注意,表13—2和表13—4数据中,当时间变量(或记录数量)相等时,数 据中变量(或记录)的位置通常是有意义的,它们隐含地注明了某一个特殊的时 点。这与表13—-1和表13-3数据中不等量的变量或记录编排是完全不同的。当 时间信息的数量在各个案例中不同时,时间通常明确地通过事件发生的年、月、 日所标注。在后面的例子中,我们会看到对这两种类型资料的SPSS编程命令也 将不同。因此,我们在本章中将前一种数据格式称为“隐含的时间信息”,而对 后一种数据格式称为“明确的时间信息”。 另外,我们对于“案例”( cases)的概念也需要进一步加以区分和明确。在 诸如线性回归、方差分析等静态的常规分析方法中,调查样本的案例自然与分析 单位( Units of Analysis)一致。然而对于事件史分析而言,由于时间的引入, 参见巴比( Earl babbie)所著 The Practice of Social Research, Seventh edition Wadsworth Publishing Company,1995:巴比在该书中指出,尽管在社会科学研究中个人常常 是分析单位,但组群、组织、社会制品( social artifacts)如图书、歌曲、科研发现也可以是分 析单位,并且他指出结婚、离婚、事故、劫机等事件属于社会制品的范围
分析单位不再像上述常规方法那样简单地等同于案例。因此,调查的样本规模与 要进行分析的数据规模之间存在着区别。很多事件史分析都不是在个人案例为分 析单位的水平上进行的,而是在一种时间单位如持续期(spel)的基础上进行 的。于是,当一个样本案例多次发生某一事件时就包含多个持续期的信息。比 如,例1中的第一个案例生育过三个孩子,就意味着她将提供多个需要分析的持 续期。在离散时间模型中,分析数据的案例是由风险集及其时间间隔两者所共同 决定的,它的分析单位可以是人年或人月( person-year or person- month)。很明 显,在事件史分析中,分析案例的总量远远大于样本规模。正因为如此,我们将 在本章中特别区分这两个概念。读者在后面的例子中将会看到,将数据从样本案 例为口径的格式转换为一套新的以时间单位为口径的工作数据( working data set),往往是一项必不可少而又难度颇大的工作。 在处理事件史数据时的一个关键问题是在隐含时间或明确时间信息的基础上 计算出每个持续期的时间长度。在SPSS、SAS和BMDP软件中拟合风险模型时 都需要两个方面的信息来作为因变量的输入,即持续期的长度和一个用来标志删 截状况的虚拟变量 SPSS软件本身提供了强大的数据转换功能.它既可以完成将以样本案例为 口径的数据改变为以持续期为口径的工作数据,又可以完成计算持续期长度的工 作,并且SPSS的编程工作相对来说比较简单高效。 应用srsS软件处理事件史数据时,仅仅使用内部输入程序中的DATA LIST命令或其他读入或混合系统数据文件的命令是远远不够的。我们常常还需 要使用 INPUT PR(XRAM命令程序,并在其中使用DOIF、LXP、 VECTOR END CASE或 REPEATING DATA等命令来完成资料的输入。当我们需要在读 入新的案例时仍然保留某些变量的前一个案例相应值的时候,命令 LEAVE极为 有用。命令 DO REPEAT可以使很多变量完成一些同样的基本转换。对于明确 时间信息,使用 YRMODA函数(即年月日函数,计算某个日期距1582年10月 14日所经历的天数)可直接计算出各个日期之间的时间间隔长度。然而,对于 隐含的时间信息,可以应用命令(OUNT(意为计数)加上函数MAX与MIN (即最大值与最小值)于系统变量 S CASENUM(即输入数据时系统自动生成的 内部变量,此变量可标志案例的序号,但增加或删除案例后,此系统变量会相应 发生变化),来计算持续期长度。总的来说,当时间信息编排为记录时,数据改 造比较容易。对于这种类型的数据,常常使用LAG函数(lag意为时差)加上 DOIF语句来强制对一个样本案例进行改造。FLIP命令(意为转置)可以用来 轻易地对行和列的数据进行转置,这样我们就可以应用那些本来是用于改造记录
而设置的命令。换句话说,当时间信息被编排为许多变量时,比较好的策略是先 对数据进行转置,然后将变量作为记录来进行处理。在一些为了满足特别需要的 处理工作时,还要使用 AGGREGATE(意为汇总)和 TABLE(意为列表) MATCH FILES(意为匹配文件)等命令,使文件与表格有针对性地做匹配合并 或“分散”( disaggregating)。在后面的例子中,我们将示范所有这些命令的应 用 二、明确时间信息数据的处理 1.例1:对第一·类数据(需计算各风险期长度)的改造 表13-5 例1输入数据 c01134354753:275430771017922 002225142773579410 0032402317941 004245232752176313 005123143781231791031791231 主:本书所附磁盘提供此ASl数据.文件名为EX1.D 例1数据结构及所需完成的改造工作: *此数据基本结构为一个案例条记录前六个变量是不随时间变化的,用来 表示被调查者在调查时的基本情况,包括:ID、SEX、A(E、RACE、EIU 丶 UMSPELL(分别为调查序号、性别、年龄、种族、受教育程度、某一事件 的记录数目):后面是随时间而变的变量,分别用来表示事件发生的年、月 日。每一个被调查者被给予一个惟一性的调查序号。所以每一序号代表着 个人。从本例各被调查者的数据可以看出,他们的随时间变化的变量的数目 有所不同。比如,第一个样本有四个事件开始时间,即75-3-12,754.30,7 10)-1和79-2-2 我们的工作是要将此以样本案例为分析单位口径的原始数据改造为以每一次 事件为分析单位口径的工作数据。在输出中,所有不随时间变化的变量都要 附加到每一个工作数据的案例中去。1980年1月1日,即调查日期,将作为 截点。这样,最后一个日期至截点之间的时间间隔实际上是一个删截工作案 例(删截的定义请参见第十二章)。在每一个工作案例中还要加上一个新的变 量 EVENT(意为事件,同上章示例中的变量EⅤENT)来标志本工作案例中 事件是否发生。 428
【请特别注意:在后面所有的程序命令中的行号仅服务于注释的需要,在买 际指令中不能放入! 表13-6 改造例1原始数据的程序命令 1 INPUT PROGRAM 3 DATA LIST FILE='C:\EHA SPSS\EX1. DAT 4 /ID 1-3 SEX 5 AGE 7-8 RACE 10 EDU 12 NUMSPELL 14 #X1TO#X24(1x,8(3F3.0)) LEAVE工 D TO NUMSPELI 9 VECTOR V=#X1 TO #X24 10 LOOP #I-1 To 24 BY 3 11 COMPUTE DI=YRMODA(V(#I),V(#I+1),V(#I+2)) 12 COMPUTE D2=YRMODA(V(#I+3),V(#I+4),V(#I+5)) 13 COMPUTE DURA=D2-D1 4 END CASE 5 END LOOP IF MISSING(V(#I+3) 17ENDI、 PUT PROGRAM 19 COMPUTE EVENT=l 20 IF (SYSMIS(DURA)) EVENT=O 21 IF (SYSMIS(DURA))DURA=YRMODA(80,1,1)-D1 22 LIST VAR=ID TO NUMSPELL DURA EVENT 24 SAVE OUTF-LE='C: \EHA SPSS \EXI. SAV 注:本书所跗磁盘提供此SS程序.文件名为EX1!.SS 例1程序命令注释 第Ⅰ行命令 INPUT PROGRAM.标志开始输入数据的定义和改造数据的命 令这一命令用在这里是因为我们要从所读的不定长的每条记录中建立一个 或多个工作数据文件的案例 x第3行 DATA IⅠST命令指示从原始数据文件中读取数据记录,并提供原始文 件名称及所在位置(磁盘驱动器和子目录) ←第↓行继续上述命令,说明毎条原始记录中前14位数分别按固定长度格式读 入6个变量,其中第14位是变量 NUMSPELL(意为发生次数) 第5行仍是上述命令的延续部分,表示后面将定义24个同样格式的SPSS内 部使用的暂用变量( scratch variables),它们在读入时是每3个变量一组(分 别用来表示年、月、日)、每个变量为3位数字(即3F3.0)。那么24个同格 式变量实际可以恰好包含8个日期。24这个数量是事先决定的,它必须是3
的倍数(因为3个一组同格式地读入),而且这个倍数还必须大于或等于事 件发生次数,即本例中变量 NUMSPELL在样本中的最大值。在变量之前加# 符号表示此变量是运行中的暂用变量,当运行结束后自行消失。定义这些变 量为暂用变量的目的是为了运行结果更加简洁、清楚。 第7行的命令LEAⅤE是指示将原记录从ID至 NUMSPELL的所有固定变量 的值赋予要产生的新工作数据的案例。换句话说,这一命令是强制固定变量 附加到每个新建案例中去,即表示事件每次发生的新案例都保留原始记录中 的背景资料数据。 x第9行命令 VECTOR定义向量v由24个同组格式的变量值构成。 第10行命令LOOP制定循环语句,从1至24以步长为3执行循环的工作 即逢1、4、7、10、13、16、19、22时完成同样的工作。这一语句实际上是 与第5行中定义的同组格式是一致的,即前面定义三个变量一组地读入,这 里定义三个变量一组地完成数据转换。 第11行命令( OMPUTE要求计算前一个日期Dl的值,通过日期函数YR MODA将日期换算为天数(即该日期距离格里历启用的第一天1582年10月 14日之间的天数)。 第12行要求计算后一个日期D2的值。注意此处所用的数处于向量V中的位 置都分别比第11行中所用数在向量中的位置差3位 *第13行通过后一个日期值减去前一个日期值得到两次事件发生之间的间隔天 κ第14行命令 END CASE是根据每个输入记录(即样本案例)制作多个事件 发生的工作数据案例时,用来表示一个新案例结束。 第15行命令 END LOOP IF MISSING使在循环中分组读入向量值时如遇到缺 失值即结束该循环操作。这是为了在原输入记录中的事件变量已转换完毕时 停止计算口期之间的间隔。这时对应每个ID序号的新案例数应当与其NUM SPELL的值相同。 第17行命令 END INPUT PROGRAM对应前面第一行 INPUT PROGRAM命 令,表示该输入程序结束。 第19行命令( OMPUTE定义每个案例给新变量 EVENT赋值1。1表示未删 截的状况。 第20行命令指示如果当变量DURA为缺失值时要将新案例的变量 EVENT赋 值0,没有计算间隔的新案例是因为没有再发生新的事件,因此这个新案例是 删截案例。用EⅤENT=0表示被删截状况 430
¥第21行命令在不能计算两次事件之间间隔的情况下将DURA定义为前一次 事件发生日期与调查日期(1980年1月1日)之间的间隔。注意这一间隔表 示在观察期限中事件没有发生,模型的参数估计将用到这一信息。 第22行命令LIST要求列出所有新工作案例,并通过指定变量名决定了输出 新案例的格式。输出变量有从原输入记录中保留下来的I至 NUMSPELL六 个固定变量,还有在数据变换中新计算的变量DURA和 EVENT。当这一命 令被执行后,SPSS数据表中会显示新数据。同时,LIST命令使SPSS在 OUTPUT窗口列出输出工作数据,以便我们检查数据处理是否正确。 第24行SAVE命令储存刚刚获得的资料于一个新文件中。这类似于通常我们 选择SPSS主菜单中FLE栏目中的 SAVE AS命令并给予一个新文件名,另 存为一个SPSs的系统数据文件,以方便以后再次使用。 表13-7 例1输出数据 ID SEX AGE RACE EDU NUMSPELL DURA EVENT 34 49.00 1.00 3333 885 34455 111122222 222 55554433344 44442212233 489.00 333.00 766.00 266.00 275.00 406.00 1389.00 2.例2:对第一类数据(各风险期长度已知)的改造 例2数据结构及所需完成的改造工作: 在例1中,随时间变化的变量的输入数据是以年、月、日形式编排的。要 是事件间隔长度事先已经计算好了,直接作为输入数据,那么进行数据转 换的命令就会简单得多。这时我们需要用到命令 REPEATING DATA。 在下面的例子中,我们假设已经有了一个包括每段间隔长度以及该间隔中 是否发生事件虛拟变量的原始数据文件。比如,样本中第一个案例的第 段间隔是以事件发生作为终点的。那么标志事件是否发生的虚拟变量 EVENT=1,且第一段间隔长度为49天。其第二段间隔长度是885天
也是因为事件发生,所以 EVENT=1。第三段间隔持续489天,且 EVENT=1。第四段间隔共持续了333天,但是不是以事件发生为终结 的,所以这一持续期是删截的,于是EⅤENT=0。命令 REPEATING DATA可以反复完成与例1中同样的任务,但是只需要少数几条命令就能 奏效。一般,在各条记录不等长的输入数据中应该有一个表明每条记录有 多少段持续期的变量。本例中每条记录的第14列就是这样一个变量,我 们将其变量名定为 NUMSPELL。比如第一个案例中共有四段持续期,这 在 NUMSPELL值上有所显示。 表13-8 例2的输入数据 c01134354491885148913330 00222514276612660 003242312750 004245232406113890 005123143304161 注:本书所附磁盘提供此ASC数据,文件名为EN2tAI 表1-9 例2的程序命令 1 INPUT PROGRAM 3 DATA LIST FILE='C: \EHA SPSS\EX2. DAT /ID 1-3 SEX 5 AGE 7-8 RACE 10 EDU 12 NUMSPELL 14 5 REPEATING DATA STARTS=16 /OCCURS=NUMSPELL /LENGTH=7 7 /DATA=DURA 1-4 EVENT 6 9 END INPUT PROGRAM 10 11 LIST VAR=ALL 注:本书所附磁盘提供此SIS程序,文件名为EX2.SFS 例2的程序命令注释 第1行,输入程序仍然以命令 INPUT PR(XRAM开始。 兴第3行命令定义输入文件的所在位置及文件名称。注意第3行中的命令未结 束,因此没有句号。 第4行命令是第3行命令的继续,定义了6个不随时间变化的变量,测量该 案例在调查时的基本情况。 432