第二章 数据文件的管理(下)
(医学统计之星:张文彤)
2.2.1.2 从原有变量计算新变量
从头定义变量的情况多数在建立数据集时出现。但是,当数据集已经建立,需要整理、转换变量时,碰到的更多情况是需要根据某种条件从原有变量计算新变量。下面我们将按菜单条目的顺序依次讲解他们的功能。但是,首先我们需要了解一下所用的对话框界面的情况。
【SPSS对话框元素介绍】
下面是我们在第一章曾经见过的两样本t检验对话框:
这是一个非常典型的SPSS对话框。它包含了许多具有SPSS特色的对话框元素:
对话框左侧为候选变量列表框,里面列出了可被该对话框使用的变量;
右上方为Test Variables框,可将变量选入其中;注意在两个框的中间用“”相连,这是变量移动按钮,其方向表明是将变量从那个框移动到哪个框,上图中我们选中了变量group,两个移动按钮均变黑并向右指,表明变量group可以移动到他们右侧的两个框里去,改变当前框(在其他两个框里单击),移动按钮就会转向、变灰等以表明不同的意思(墙头草一个,可别小看这个功能,我想用VB实现这个功能,也是费了些工夫才把它搞定了);
右侧为一排五个按钮,分别是确定、粘贴、重置、取消和帮助。这五个兄弟也是几乎永远一起出现的,另外四个大家都比较熟悉了,重置(Reset)按钮用于取消对话框内已做的选择,恢复到默认的状态;
最下方有个Options按钮,用于设置专门用于该对话框的选项;
OK、Paste两个按钮为灰色,表明所需条件尚未满足,该按钮暂不可用。同理,Grouping Variable框下方的Define Groups按钮为灰色显示,也表明暂不可用。
【Compute Variable对话框】
例3.2? 在li1_1.sav中建立新变量temp,令其值当血磷值大于1时为2,否则为1。
解:这里需要用到Compute Variable对话框,外加一点技巧。首先给变量temp均赋值为1,然后将血磷值大于1的记录其temp变量值改为2即可。选择菜单Transform==>Compute,弹出Compute Variable对话框如下:
左上角为需要计算的变量名,在其中键入“temp”,此时“Type&Lable”按钮就会变黑,喜欢精确的朋友可以在这里对temp进行详细的定义,但如果你和我一样非常懒,就可以对它视而不见(不要生气,聪明人大多都非常懒:));左下方为候选变量列表,现在还用不着;中部为类似计算器的软键盘,可以用鼠标按键输入数字和符号,这里我们直接输入“1”,输入的内容回立刻在右上方的数值表达式窗口中出现;软键盘右侧为函数窗口,可以在这里找到并使用所需的SPSS函数;这次也用不到。好,现在“OK”按钮已经变黑,单击他,系统就会自动生成一个新变量temp,并且取值均为1。
软键盘上几个奇奇怪怪的符号的含义如下:
~=
&
|
**
~
不等号,等价于<>
逻辑符号AND
逻辑符号OR
乘方,相当于函数EXP()
逻辑符号NOT
在函数窗口中选中某个函数并单击右键,系统就会弹出该函数的用法说明。
函数主要是和变量名组合起来使用的,比如说ABS(x)就是取变量x的绝对值。
好,现在开始进行第二步,再次选择菜单Transform==>Compute,系统也再次弹出这个对话框--等等!注意到了吗?该对话框自动记住了你上次输入的内容,几乎所有SPSS的对话框都有这个特性,这会大大方便我们的使用。好,将数值表达式窗口中的1改为2,然后单击中下部的“If”按钮,系统弹出记录选择对话框如下:
不需要太多解释,大部分内容都是前面见过的。由于我们这里不是对所有记录做变换,因此选中第二个单选钮“Include if case statisfies confition:”,此时下方的所有窗口变亮,表明现在可用;而“Continue”按钮变灰,表明当前还没有提供所需的信息,好,我们就来提供,在左侧选中血磷值(x),然后单击“”,x就被引入了右侧的变量框,任你用键盘或者用鼠标,总之将下面这个算式补充完:x>1。现在可见“Continue”按钮再度变黑。在它又变灰之前赶快单击它(开个玩笑),系统回到Compute Variable对话框,请注意If按钮右侧的变化:x>2。如果你做的结果不一样,请重来一遍。
现在单击“OK”按钮,由于我们要替换变量值,系统会弹出一个确认对话框,确认替换,马上你就会看到,我们已经把这道题做完了。
【Count对话框】
Count对话框用于计算某个值或某些值在某个变量的取值中是否出现(好象有点拗口),比如我们想看看有哪些记录的血磷值在2~3之间,选择菜单Transform==>Count,系统弹出Count对话框如下:
Target Variable框中用于指定记录变量值是否出现的变量名,在这里输入temp2;选中血磷值(x),将其选入Variables窗口,此时“Define Values”按钮变黑,单击它,系统弹出变量值定义窗口如下:
左半部为变量值定义窗口,可以定义某个值、系统缺失值、系统或用户定义缺失值、变量值范围、小于某值或大于某值。我们这里是第四种情况:选择Range,在through两侧分别键入2、3,然后单击已变黑的“Add”按钮,“2 thru 3”就会被加入“Values to Count”框内。然后单击“Continue”,再单击Count对话框的“OK”,可以看到系统自动生成变量temp2,其中10、11号记录因血磷值介于2和3之间,temp2取值为1,其余的记录temp2取值均为0。
SOS,SOS,请大家千万注意,Count对话框有一个潜在的bugs,当你需要计算同时满足两个变量取值条件的记录数有多少时,直接用该对话框会得出完全错误的结果。这里有一点技巧,需要对对话框生成的指令加以修改,至于怎么修改嘛,我们将在Syntax(语法)窗口使用详解一章中讲述 :)。
【Recode对话框】
Recode对话框用于从原变量值按照某种一一对应的关系生成新变量值,可以将新值赋给原变量,也可以生成一个新变量。
例2.3? 在Li1_1.sav中生成新变量temp3,当血磷值小于1时取值为0,1~2时取值为10,大于2时取值为20。
解:选择菜单Transform==>Record==>Into Different Variables,Recode对话框如下:
将血磷值(x)选入Input Variable->Output Variable框,此时Output Variable框变黑,在其中键入新变量名temp3并单击Change,可见原来的x->?变成了x->temp3。现在单击“Old and New Values”,系统弹出变量值定义对话框如下:
许多东西和前面类似,不再重复。按照题目的要求,选择Range:Lowest through,在右侧框中键入1,然后在右上方的Value右侧框中键入对应的新变量值0,此时下方Add键变黑,单击它,Old->New框中就会加入Lowest thru 1->0,按照类似的方法依次加入另两条转换规则,最终Old->New框中共有Lowest thru 1->0、1 thru 2->10、Else->20三条,现在单击Continue,再单击OK,系统就会按要求生成新变量temp3。
哎呀不得了,图片太多了,虽然这样非常直观,但下载速度太慢了。等大家对基本界面操作熟悉了后,我们将对比较简单的对话框试着对操作用文字的方式描述,比如上面的操作我们将用文字表达为:
Output Variable框:选入x
Output Variable Name框:键入temp3:单击Change钮
选中x->temp3:单击Old and New Values钮:
Range:Lowest through单选钮:键入1:New Value Value单选钮:键入0:单击Add钮
Range: through单选钮:两侧分别键入1、2:New Value Value单选钮:键入10:单击Add钮
Range: All other values单选钮:New Value Value单选钮:键入20:单击Add钮
单击Continue
单击OK
怎么样,还能理解吧。
【Categorize Variables对话框】
Categorize Variables对话框用于将连续性变量自动按要求分成等间距的几类。其界面非常简单,许多东西都是我们所熟悉的,唯一特别的是右下方的number of categories框,用于输入变量的等级数,默认为4,比如我们希望将血磷值按大小分成5个等级,先将血磷值选入Create Categories框,然后将下面的4改为5,单击OK,就会看到系统产生了一个新变量nx(即number of x之意),其取值就对应了血磷值相应的5个等级(1~5)。重复一下,具体操作步骤为:
Create Categories框:选入x
Number of categories框:5
OK
【Rank Cases对话框】
例2.4? 请分组计算血磷值的秩和。
解:选择菜单Transform==>Rank Cases,弹出Rank Cases对话框如下:
将血磷值选入Variable框,分组变量选入By框,单击OK即可。系统会建立一个新变量rx(即原变量名前加r表示Rank之意),其取值为x分组的秩次。
解释一下Rank Cases对话框的其他几个零件:
左下角的Assign Rank 1 to框架用于选择将秩次1赋给最小值还是最大值;
中下部的Display summary tables复选框用于确定是否在结果窗口内输出结果报表;
Rank Types钮用于定义秩次类型,有Rank(秩分数)、Savage评分(新变量值按指数分布)、Fractional rank(新变量值是秩分数除以非缺失值观测量的权重之和)、Fractional rank %(新变量值是秩分数除以非缺失值观测量数乘100)、Sum of case weights(新变量值是各观测量的权重之和)、Ntiles(新变量值是按所选变量的百分位数分组的组序号),默认值为Rank。单击More按钮,还会有更多的设置,这里就不再讲了。
Ties钮用于定义对相同值观测量的处理方式,可以是取平均秩次、最小值、最大值或当作一个记录处理,默认值为取平均秩次。
【Automatic Record对话框】
该对话框用于按原变量值的大小生成新变量,变量值就是原值的大小次序,功能和Rank Cases对话框重复(等价于相同值观测量当作一个记录处理的情况)。
【Create Time Series对话框】
用于自动生成时间序列变量,由于太专业,这里不做过多解释。
【Replace Missing Value对话框】
用于填充缺失值,结果存入一个新变量。填充方法有:序列的均数、相邻若干点的均数、相邻若干点的中位数、线性内插、线性外延,默认值为序列的均数。
2.2.2? 数据的录入
2.2.2.1? 直接录入
我想直接录入的问题就不用多讲了吧,直接敲就是了!
2.2.2.2? 数据录入技巧
和其他常用统计软件相比,SPSS数据界面最大的优势就是支持鼠标的拖放操作,以及拷贝粘贴等命令,下面的数据录入技巧就是对这些功能的利用。
【连续多个相同值的输入】
如前面group变量有连续多个1,如果直接输入,可以在第一格内输入1并回车,然后回到刚才的单元格并单击右键,选择copy,最后用拖放方式选中所有应输入1的单元格,单击右键并选择paste,所有选中的单元格就会都被刚才拷贝的1填充。
【将EXCEL数据直接引入SPSS】
Excel已经打开原数据,并且数据量较少的时候,可以直接用拷贝粘贴的方法将数据引入SPSS:先在EXCEL中选中所有的数据(不包括变量名),然后选择拷贝命令;然后切换到SPSS,最好使行1列1单元格成为当前单元格,然后执行粘贴命令,数据就会全部转入SPSS,再定义相应的变量即可。
2.3? 进一步整理数据文件--Data菜单
在许多情况下,我们需要先对数据进行一些整理(如分组、合并、加权等)才能将其用于最终的统计分析。这些功能基本上都集中在Data菜单项中,下面我们就对这些对话框做逐一介绍。
2.3.1 用于数据管理的菜单项
【Sort Cases对话框】
例2.5? 对数据集li1_1.sav按group升序,x降序的次序排列。
解:选择菜单Data==>Sort Cases,系统弹出Sort Cases对话框,该对话框并不复杂,其中比较特殊的是下方的Sort Order单选钮,有升序和降序两种选择。请注意,该单选钮是和上方的Sort By框一起使用的,具体方法如下:
确认升序单选钮被选择,将Group选入Sort By框;
选择降序单选钮,将x选入Sort By框。
请注意:group和x后面分别跟着Ascending和Descending,表明前者是按升序、后者按降序排列;由于Group在前,因此排序时以Group优先。
【Transepose对话框】
该对话框用于对数据进行行列转置,可以在原数据文件中指定一个变量记录转置后的变量名。原变量名则自动保存在系统产生的名为case_lbl的字符变量中。
该对话框也非常简单,左侧为候选变量框;右上方为Variable框,用于选入需要转置的变量,一般应选入除名称变量外的所有其他变量,如果有变量未选入,则转置时会被自动丢弃;右下方为Name Variable框,用于指定原数据文件中记录转置后变量名的字符变量,但不是必需的,此时系统会将新变量自动按var001、var002...的顺序命名。
【Merge Files对话框】
用于合并数据文件,实际上包括了两个对话框,分别对应了两种合并方式:
1. 从外部数据文件中增加记录到当前数据文件中,称为纵向合并,用Add Cases对话框完成,相互合并的数据文件中应该有相同的变量。选择菜单Data==>Merge Files==>Add Cases,系统首先弹出打开数据文件对话框,选中需要添加的数据文件并按OK,系统才弹出Add Cases对话框,左侧显示的是新、老数据文件中不匹配的变量名,右侧显示的是已经匹配的变量名。可以用Rename按钮对不匹配变量改名(先选中)或用鼠标强行匹配(即先按Ctrl键选中匹配的两个变量再单击Pair钮)。右下方的Indicate case source as variable复选框用于定义一个新变量以区分哪些记录是后来添加的。选择停当后单击OK,该操作就完成了。
实际上右侧显示的是将要包括在合并后数据集中的变量,如果有哪个你不需要,把它弄到左侧框中即可。
2. 从外部数据文件增加变量到当前数据文件,称为横向合并,用Add Variable对话框完成,相互合并的数据文件中应包含同样的记录。选择菜单Data==>Merge Files==>Add Variable对话框,系统同样先弹出打开数据文件对话框,单击OK后弹出和前面相似的Add Variable对话框。按需选择即可。
【Aggregate对话框】
用于对数据进行分类汇总,所谓分类汇总就是按指定的分类变量对观测值进行分组,对每组记录的各变量值求指定的描述统计量,结果可以存入新数据文件,也可以替换当前数据文件。
上图中各个零件的含义如下:
Break Variables框:用于选择分组变量;
Aggregate Variables框:用于选择被汇总的变量;
Name&Label钮:用于定义新产生的汇总变量的名称和标签;
Function钮:用于定义汇总函数,共有三组函数,以最常用的第一组为例,可选的函数有均数、同组的第一个观测值、最后一个观测值、同组记录数、标准差、最小值、和、最大值共8个;
Save Number of cases in break group as variable复选框:用于定义一个新变量以存储同组的记录数;
Create new data file单选钮:定义一个新文件以存储汇总的结果,右侧的File钮用于具体文件名的定义,默认文件名为AGGR.sav;
Replace working data file单选钮:用汇总的结果替换原来的数据。
例2.6? 计算Li1_1.sav中两组的血磷值标准差。
解:该题完全可以用更简单的方法完成,这里只是演示一下汇总对话框的用法。
Break Variables框:Group
Aggregate Variables框:x
Function钮:(Standard deviation单选钮:Continue钮)
Replace working data file单选钮:选中
OK
【Split File对话框】
用于将数据文件分组进行处理,该对话框我们在第一章时已经使用过了,这里再介绍一下各个对话框元素的用途:
Analyze all cases单选框:和下面的两个单选框为一组,选中本框不拆分文件;
Compare groups单选框:按所选变量拆分文件,各组分析结果紧挨在一起便于相互比较;
Organize output by groups单选框:按所选变量拆分文件,各组分析结果单独放置;
Groups based on框:用于选择拆分数据文件的变量;
Sort the file by grouping variables单选框:将数据按所用的拆分变量排序;
File is already sorted单选框:数据保持原状,不按所用的拆分变量排序。
【Select Cases对话框】
很多时候我们不需要分析全部的数据,而是按某种要求分析其中的一部分(比如只分析男性的身高、只对前200个数据进行分析以了解大概情况),这时使用Select Cases对话框可以大大简化工作。 该对话框界面如下所示:
其中主要的对话框元素为:
All cases单选钮:和下面的4个单选钮为一组,选中它则分析所有的记录;
If condition is satisfied单选钮:只分析满足条件的记录;
If按钮:和If单选钮一起使用,单击后弹出If对话框;
Random sample of cases单选钮:从原数据中按某种条件抽样;
Sample按钮:和Random单选钮一起使用,可以设定按百分比抽取记录,或者精确设定从前若干个记录中抽取多少个记录;
Based on time or case range单选钮:基于记录序号来选择记录;
Range按钮:和Based单选钮一起使用,用于输入记录序号范围;
Use filter variable单选钮:使用筛选指示变量来选择记录,必需在下面选入一个筛选指示变量,该变量取值为非0的记录将被选中,进入以后的分析;
Filtered单选钮:和下面的Deleted单选钮为一组,表示未被选中的记录只是被隔离,这些记录的记录号会被加上斜杠以示区别;
Deleted单选钮:未被选中的记录将被删除,一般不要使用。
当对数据集做出筛选后,所做的筛选将在以后的分析中一直有效,直到再次改变选择条件为止。同时在多数情况下,系统会自动产生一个名为filter_$的筛选指示变量,被选中的记录该变量取值为1,反之则为0。
【Weight Cases对话框】
在默认情况下,每一行就是一条记录,这在多数情况下没有什么问题,但有时却非常麻烦,想想看如果你需要计算一个四格表卡方,有100例,如果每一行就是一条记录,你就需要输入100条记录!如果希望在计算过程中利用不同的变量对数据进行加权处理,就需要用到Weight Cases对话框。该对话框的使用极为简单,界面上有两个单选钮,分别是不权重记录和用某变量权重记录,如果选择后者,则需要选中一个权重变量。
【Data菜单中的其余对话框】
Define dates对话框:可以自动生成时间变量。
Insert Variable命令:在当前列插入新变量。
Insert cases命令:在当前行插入新记录。
Goto cases对话框:到达指定记录号的记录,该命令在记录数极多时(1000条以上)非常有用。
2.3.2? 正交设计菜单项
正交设计不包含在SPSS/BASE模块中,因此由于解密范围的问题,有的D版中不含该菜单项,不过我用的10.0版里是有的:)。
以前我以为SPSS不能作正交设计,感谢网友edof@sh的提醒,经研究,在SPSS中可以直接进行正交设计,Orthogonal Design子菜单项就是专门用于完成该任务的,具体做法用下面的例子说明如下:
例2.7 做A、B两个因素的正交设计,A因素有三个水平,B因素有两个水平。
解:选择Data-->Orthogonal Design-->generate,弹出的就是正交设计窗口,操作如下:
Factor name框:输入A;
单击ADD钮;
确定变量A被选中,单击Define value钮;
? Value列:头三行分别输入1、2和3,代表变量A的三个水平;
? 单击continue钮;
Factor name框:输入B;
单击ADD钮;
确定变量B被选中,单击Define value钮;
? Value列:头两行分别输入1、2,代表变量B的两个水平;
? 单击continue钮;
单击OK
在第10步定义完后,对话框应如下图所示:
在其他没有用到的选择项中,各种LABELS当然适用于定义相应的各种标签的;Data Files单选框组用来定义产生的数据文件是存为制定的文件名,还是直接替换当前工作文件;而Define Value对话框中的Auto fit框可以自动填充从1到你输入的那个数值这么多个水平的定义,特别适合我这种懒人。
这里我们直接替换当前工作文件,在这个自动产生的正交设计数据集中,前两个变量就是要分析的A和B,各个水平已经按正交设计的要求排列好了。后面的status_和card_变量是系统产生的LOG变量,可以不管它。现在你再建立一个结果变量,输入实验结果,就可以进行正交设计的分析了。