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”,系统弹出变量值定义对话框如下:
许多东西和前面类似,不再重复。按照题目的要求,选择Rangeowest 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钮:
-
Rangeowest 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对话框】
用于填充缺失值,结果存入一个新变量。填充方法有:序列的均数、相邻若干点的均数、相邻若干点的中位数、线性内插、线性外延,默认值为序列的均数。 |