2.2数据文件的转换
2.2.1 ASCII码数据文件的转换
几乎所有有计算功能或管理数据功能的软件,都可以输出ASCII码数据文件。因此掌握ASCII码数据文件转换成SPSS数据文件的方法是非常重要的。
1. 不同格式的ASCII码数据文件
SPSS可以读入ASCII 码数据文件并将其转换为SPSS 格式,显示在数据窗口中。ASCII码数据文件有固定宽度格式(Fixed width)和使用分隔符的自由格式(delimited)两种。所谓固定格式即一个观测量(或称记录)占一行或若干行,每个变量所占起始列和结束列是固定的,如图2-21所示。自由格式即每个变量在文件中的列位置不一定是固定的,各变量值之间使用相同的符号(如空格或逗号)隔开,转换时根据分隔符和变量值排列顺序进行。
(1) 固定格式排列的ASCII码数据文件中,数据的排列方式有以下两种。
①每行安排一个观测量,每个变量值之间由空格分隔,见图2-21(a)。这种固定格式也可以看作使用分隔符的自由格式数据文件。见data02-02a.txt。
②每行安排一个观测量,但变量值之间没有任何分隔,如图2-21(b)所示,数据安排实例见data02-02b.txt。
图2-21 不同排列的固定格式ASCII码数据文件
(2)使用分隔符的自由格式ASCII码数据文件
①每行安排若干个观测量,如图2-22(a)。或整齐地排列两个观测量,如图2-22(b)所示。看上去既是固定格式ASCII码数据文件,又是使用分隔符的自由格式ASCII码数据文件。转换程序将其归为使用分隔符的自由格式文件。如果使用固定格式转换的操作,可以在转换后通过对数据文件的编辑才能形成正确的转换结果。
②每行一个或多个观测量,使用分隔符将各变量值分开,甚至一个观测量从一行中间开始并在下一行继续,如图2-22(b)所示,见数据文件data02-04.txt。
图2-22 不同排列的自由格式ASCII码数据文件
2. 固定格式ASCII码数据文件的转换
以图2-21(b)为例说明固定格式ASCII码数据文件转换为SPSS数据文件的操作。
图中所示数据文件为data02-02b.txt,数据由5个变量组成,变量编号占1、2列,性别占第3列,年龄占第4、5列,身高占6~9列(小数点占一列),体重占10、11列。
数据文件转换步骤如下:
(1)按File→Read Text Data顺序展开Open File对话框,指定一个扩展名为txt的数据文件(dada02-02b.txt)并单击“打开”按钮,展开Text Import Wizard对话框,如图2-23所示。分6步完成转换工作,此为第1步。数据显示在下面的带有标尺的预览框内。
图2-23 第1步:Text Import Wizard对话框
右面的Does your text file match a predefined format栏询问文本文件是否要与事先定义的格式匹配,如果需要,单击Yes并通过单击Browse按钮指定一个扩展名为tpf的文件。通常不选择该选项。单击Next按钮,打开Step 2 of 6第2步的对话框,如图2-24所示。
图2-24 第2步:指定数据排列方式
(2)在第2步对话框中回答两个问题:
① How are your variable arranged栏,如何安排你的变量?选择Delimite是使用分隔符将变量隔开的;选择Fixed Width是使用固定列宽度。图2-24预览框中的数据排列整齐,列宽是固定的,因此选择Fixed Width选项。
② Are variable names included at the top of your file栏,数据文件顶部是否包括变量名?yes或no选其一。移动滚动条可以看到,顶部没有变量名,因此选择no。单击Next按钮打开第三步对话框,如图2-25所示。
图2-25 第3步:设置参数
(3)在第 3 步对话框中要求提供有关观测量的信息。一个观测量相当于数据库中的一个记录。各选项的含义与操作如下:
① The first case of data begins on which line number参数框,要求指定数据文件中第一个包括数据值的行号,默认值为1。如果在顶行包括了对变量的解释文字或变量标签,该值不能是1。应该在该项后面的数值栏中设置具体值。
② How many lines represent a case参数框,要求回答一个观测量占几行,以确定何处为一个观测量的结束位置和下一个观测量的起始位置。本例每个观测量占一行。
③ How many cases do you want to import栏,指定想转换的观测量数。
● All of the cases,指定转换所有观测量。此为默认的选择。
● The first□cases,指定前n个观测量,n是自定义的正整数。框中输入n值。
● A percentage of the cases,指定一个百分数,转换系统按指定的百分比随机提取观测量。由于随机采样是通过对每个观测量产生一个独立的伪随机数进行的,因此该百分比是一个近似值,最后采样得到的样本占观测量总数的百分比接近这个指定值。本例指定转换所有观测量,选择第一项。
(4) 第 4 步窗口画面如图2-26所示。在浏览窗口中,加竖线将各变量值分开,标明将如何读取数据。浏览区上有尺,左有观测量号。插入分隔线和去除分隔线的方法有二:
图2-26 第4步:变量间加分隔线
① 需要插入变量分隔线处单击鼠标键,出现分隔线。本例的ASCII 码数据文件中各变量值间没有分隔符,因为1、2列为编号值,第3列为性别值,因此要在第2、3列之间加分隔线。在列间单击鼠标左键,就会插入一根分隔线;右键单击一根已经存在的分隔线,该分隔线变成蓝色,再单击Delete Break按钮,则删除该分隔线。
② Column Number,在第n列右需要加分隔线则输入该列的列号n。单击Insert Break按钮,则在第n列右侧加入分隔线,单击Delete Break按钮,将第n列右侧分隔线删除。
由计算机产生的连续数据流,各变量值之间没有空格或其他分隔符,很难确定一个观测量从哪里开始,到哪里结束,应该使用其他应用程序对其重新编辑成便于转换的排列。
(5) 第5步对话框如图2-27所示。这一步确定变量名和变量类型。对话框预览栏内显示出根据第4步的变量分隔线划分的各变量数据。变量名为系统默认的Vn。n为自左至右的变量顺序号。转换程序据此对各变量读取并转换形成SPSS数据文件。
图2-27 第5步:定义变量名和类型
①在预览栏中单击要定义的默认变量名。在Variabl name下面输入自己命名的变量名。除应该复合变量名的有关规定外,不能重名。
② Data format下拉列表中选择一种类型,定义选中变量的数据类型。
(6) 第6步对话框如图2-28所示。
图2-28 第6步:最后一步保存格式
①在Would you like to save this file format for future use栏内选择Yes,指定将该格式保存到一个文件中,以便对相同或类似数据文件进行转换时使用。单击Save as按钮,打开相应的对话框,指定保存位置和文件名。否则单击No按钮。
② Would you like to paste the syntax栏内选择Yes,把各步确定的转换参数粘贴到语句窗口形成命令文件,以便进行类似转换工作时使用。否则单击No按钮。
一切参数设置工作完成后,单击Finish完成按钮,转换开始,见图2-28。最后在数据编辑窗口中显示转换结果,见图2-29。在数据编辑窗口中对各变量的标签、值标签、缺失值等属性再进行完善和修改。
图2-29在数据编辑的两个窗口中的转换结果
3. 自由格式ASCII码数据的转换
自由格式ASCII码数据的文件有以下特性:
① 各观测量中的各变量值按相同顺序排列,但同一变量的值不一定占有相同的列位置。
② 两个值之间以空格、逗号或其他符号分隔。
③每行可以有不止一个记录(一个记录即一个观测量)。
在转换时,读完最后一个定义的变量的值就读完了数据文件中的一个观测量,然后SPSS读下一个值时就认为是下一个观测的第一个变量的值。因此,定义的变量数必须与ASCII 码数据文件中的变量数目相同,否则转换后的结果是混乱的。当存在两种类型的变量时,会出现数据与变量类型不匹配的错误。
【例4】data02-04.txt是一组12盎司啤酒中的成分和价格的ASCII码数据文件。如图2-22(b)所示。是一个空格分隔、一行两个记录的Text文件。变量包括beername(啤酒名)、calorie(热量卡路里)、sodium(钠含量)、alcohol(酒精含量)、cost(价格)共5个变量。空格做分隔符,且空格数不定。
转换为SPSS格式数据文件的操作步骤是:
(1)按File→Read Text Data顺序展开Open File对话框,指定一个扩展名为txt的数据文件data02-04.txt并单击“打开”按钮,展开Text Import Wizard对话框,如图2-30所示。分6步完成转换工作,此为第1步。数据显示在预览框内。可以看出数据间空格做分隔符,每行一个记录但排列较乱。
图2-30 第1步:打开ASCII码数据文件
右面的Does your text file match a predefined format?(询问文本文件是否与事先定义的格式匹配)栏,如果是,单击Yes按钮并通过单击Browse按钮指定一个扩展名为.tpf的文件。通常不选择该选项。单击Next按钮,打开Step 2 of 6第2步的对话框,如图2-31所示。
图2-31 第2步:指定数据排列方式
(2)在第2步对话框中回答两个问题:
① How are your variables arranged栏,如何安排变量有两个选项:Delimited,用分隔符隔开变量值;Fixed Width,固定列宽度。
图2-31中的预览框中的数据排列凌乱,不是固定列宽度,但每两个数据之间均有空格,是使用分隔符的,因此选择Delimited。
② Are variable names included at the top of your file栏,数据文件顶部是否包括变量名?Yes或No选其一。移动滚动条可以看到,顶部没有变量名,因此选择No。单击Next按钮打开第3步对话框如图2-32所示。
图2-32 第3步:参数设置
(3)在第 3 步对话框中提供有关观测量的信息。
① The first cases of data begins on which line number参数框,指定数据文件中第一个包括数据值的行号,默认值为1。本例顶行没有变量名,所以数据从第1行开始。参数框内数值应为1。
② How are your cases represented栏,你的观测量是怎样描述的,实际上是问一个观测量占几行?以便确定何处为一个观测量的结束位置和下一个观测量的起始位置。本例为两个观测量占一行。此项不能确切回答数据文件排列的实际情况。其中有两个选项:
● Each line represents a case,每行仅包括一个观测量,即使变量非常多,使得一行非常长,也属于这种情况。如果各行包括的数据量不同,每个观测量包括的变量数由数值最多的行确定。数值较少的观测量,多出来的变量值赋予缺失值。
● A specific number of variables represents a case,指定每个观测量包括的变量数,告诉系统在何处停止读一个观测量,并开始读下一个观测量。该选项允许在同一行中有多个观测量或一个观测量开始于一行的中部,并在下一行继续。系统根据数值个数读取数据,不管行数。因此每个观测量必须包括所有变量的数值(缺失值必须使用分隔符指定),才能正确进行转换。本例一个观测量包括5个变量因此选择此项,设置数值5。
③ How many cases do you want to import栏,指定想转换的观测量数。
● All of the cases,指定转换所有观测量。此为默认的选择。
● The first □ cases,指定前n个观测量。n是由读者输入的正整数。
● A random percentage of the cases (approximate),指定一个百分数,转换系统按指定的百分比随机提取观测量。由于随机采样是通过对每个观测量产生一个独立的伪随机数进行的,因此该百分比是一个近似值。本例指定转换所有观测量,选择第一项。
单击Next按钮,打开如图2-33所示的第4步对话框。
图2-33 第4步:指定分隔符图
(4) 第4步指定分隔符和字符串的标识符。
① Which delimiters between variables变量间的分隔符设置。
栏中列出的分隔符有5种,Tab(跳格)、Space(空格)、Comma(逗号)、Semicolon (分号)、Other(其他)。可以同时选择几种。还可以选择Other项,并在其后的文本框中输入一个分隔符。根据指定的分隔符,转换后的数据文件状态显示在预览栏中,可以查看所指定的分隔符是否有误。本例数据中有缺失值,所以选择Tab,预览窗口中的观察显示结果选择Tab效果最佳。
② What is the text qualifier 文本限定标志设置。下设5个选项:None(没有限定符)、Single quote(单引号)、Double quote(双引号)、Other(其他),选择Other需要在其后面框中输入一个具体的限定标准。本例中,字符串没有加单引号或双引号标识,所以在右栏中选择None。
单击Next按钮,打开如图2-34所示对话框。
图2-34 第5步:定义变量类型等属性
(5) 第 5 步定义每个变量值的变量名和数据格式,以便在进行转换并组成数据文件时读取各变量值。在预览栏内选择一个变量,对它进行定义。选择时单击要定义的一列数据顶部的默认变量名,默认变量名出现在Variable name栏内。
① Variable name,删掉或覆盖默认的变量名,输入自己定义的变量名。
② Data format,在下拉列表中选择变量类型。
本例定义变量beername为字符型变量,对字符型变量还要在后面的Characters栏中输入字符串长度。本例输入最长的字符数13;本例还定义变量calorie、sodium、alcohol、cost为数值型。
(6) 最后一步如图2-28所示,只需回答两个问题。
①是否要保存转换使用的数据格式以便以后使用。如果需要,则单击Save As按钮指定存储位置和文件名。本例回答No。
②是否要将其转换为SPSS命令语句。
选择过后,单击Finish按钮,系统开始进行转换。转换后的数据出现在数据编辑窗口中,如图2-35所示。在数据编辑窗口中对转换后的数据进行编辑。例如调整每个变量所占宽度等。
图2-35 数据编辑窗口中的转换结果
2.2.2数据库文件的转换
任何数据库文件,例如Excel、dBase、FoxBase、FoxPro、Oracle,要使用SPSS软件进行分析处理,就必须将数据库文件转换为SPSS格式。
1. 快速完全转换
快速完全转换就是打开对话框选择一种数据库文件直接打开。以打开中国女排档案的Excel文件为例。
(1)按File→Open→Data顺序打开Open File对话框,建立搜索路径。
(2) 展开文件类型菜单,选择Excel类型,选择中国女排档案文件data02-17.xls。
(3) 单击Open按钮,打开Opening Excel Data Source对话框,见图2-36。在对话框中设置:
图2-36指定转换参数的对话框
① Read variable names from the first row of data是否从数据文件第1行读取变量名。对Excel文件来说,回答是肯定的。因此选择此项。
② Worksheet 工作簿。在这项中指定工作簿中的工作表和读取数据的范围。默认值是系统对所指定的Excel文档的分析得出的,工作表是sheet1,数据范围是A1:E15。
③ Range部分无须再指定范围。
④ Maximum width for string columns 最大的字符串列宽度。
单击Continue按钮,转换自动进行。结果见图2-37。
图2-37 转换结果
2. 选择部分数据库字段转换为SPSS数据文件
SPSS 16.0虽然可以直接打开许多类型的数据文件,例如直接打开Excel数据文件,但是,转换成的SPSS数据文件包括所有变量,如果要选择某些变量,或者数据库中的字段组成SPSS数据文件,使用下述方法更方便。
(1)按File→Open Database→New Query顺序展开Database Wizard对话框,如图2-38所示。
图2-38 数据获取工具主对话框
右栏中显示的是一些已经安装了原软件的数据库类型。如果想转换的数据文件是图 2-38主对话框中不包括的类型,例如Lotus 1-2-3、Visual FoxPro数据库等,可以单击Add ODBC Data Source按钮打开下一个对话框,增加新的数据源。但是必须事先安装了相应的软件,以便使用其数据库驱动程序,否则无法完成添加数据库类型的工作。
(2)在对话框中的数据源栏内选择一种数据源,如选择Excel数据文件。
● 单击Next按钮。在如图2-39所示对话框中,单击Browse按钮,指定一个想要进行转换的Excel文件。单击OK按钮后,在下一个窗口列出Excel工作簿中所有工作表。
图2-39 选择具体数据库文件
● 如果选择了数据库文件,例如DBF 文件,单击Next按钮,系统将找到指定类型的数据库文件,在下一个窗口中列出各字段,见图2-40。
(3)在Avaliable Tables栏选择变量或字段。
● 如果指定的Excel 文件,在左栏中显示所有的工作表,单击工作表前面的十字图标,显示变量表。
● 如果指定的是数据库文件,单击数据库文件名前面的十字图标,直接在左窗口显示字段列表。
●可以单击另一个工作表Sheet(或另一个数据库)选择需要的变量(或字段);打开两个以上工作表(或数据库),选择需要变量(或字段)。
(4) 鼠标单击Excel工作表中的变量名(或数据库的字段名),单击向右箭头按钮,将显示到右栏中,见图2-40。
图2-40 选择转换为SPSS变量的字段
(5) 排列变量出现顺序。选择完成后,还可以在右栏Retrieve Fields in This Order中选择一个变量后,单击上下箭头按钮改变变量的排列顺序。单击Finish按钮,按右窗口中变量排列顺序转换。在数据编辑窗口中显示转换结果。
(6) 选择观测量。如果需要根据表达式选择数据库中的某些观测量,可以在变量选择完成后,单击Next按钮,进入如图2-41的对话框,按给定的表达式、指定的方法和给定的数量选择观测量。
图2-41 确定选择观测量的标准、方法和数量
①在Field栏选择变量(或字段)双击之,变量出现在Criteria栏的第一个 Expression1列中,单击向下箭头按钮,在下拉菜单中可以选择其他变量(或字段);在Relation列的下拉菜单中选择关系运算符;在第二个Expression 列给出关系表达式的另一部分。这样,在第一行的Expression1、relation、Exepretion2三者形成一个完整的表达式,作为选择观测量的标准。
② 选择观测量的方法。在Sampling Method栏中有两个选项:
● Retrieve cases and randomly select in SPSS,先转换观测量,在SPSS中随机选择。
● Randomly select in database and retrieve into SPSS,在数据库中随机选择,再转换到SPSS 里。
如果先转换然后在SPSS中选择,不能获得数据库的子集。
③ 采样数量的确定。在Sample size栏中有两个选项:
● Approximate percentage of all cases后面给出百分数。系统按这个百分比确定采样数。这个数字是近似的。
● Exact number of cases 要求给出确切的采样数。可以在Number of cases后给出样品数量,由系统随机选择,也可以在From First后面给出数字,则系统从第一个观测量开始取给定数量的观测量组成样本。
单击Next按钮进入Define Variables对话框,见图2-42。
图2-42 编辑变量属性对话框
(7)在Defined Variables对话框中编辑变量属性。由于只能确定变量类型,一般数值型变量宽度采样用默认值。在最后一行确定字符串变量的长度。下设两个选项:
① Width for variable-width string fields 字符串变量的宽度在后面的数字栏内填写,否则按默认的255字节(255个英文半角)确定宽度。
② Minimize string widths based on observed values 根据观测值的实际宽度确定字符串变量的最小宽度。
(8) 如果想把转换后的数据先保存起来,可以单击Next按钮,进入下一个对话框,否则可以直接单击Finish按钮,开始转换,转换结果见图2-43。
图2-43 中国男排数据库选择变量、观测量转换为SPSS数据文件的结果
注意:要重新编辑变量的测度类型。因为转换后的变各量测度类型不一定正确。
图2-38~图2-42是将中国男排档案资料数据库(Excel工作表)转换成SPSS数据文件的过程,只选择身高大于等于1.97的运动员的姓名、生日、身高、体重、扣球高度、拦网高度6个变量进行转换。转换结果各变量均为Norminal标称变量,应该把身高、体重、扣球高度、拦网高度的测度类型改为Scale尺度型。
2.2.3 观测量的查重
1. 实际工作中有时会输入重复的数据
● 同一个观测量输入了多次;
●多个观测量共用一个标识变量的值,但是第二标识变量的值不同;例如同一个家庭的多个成员,共用一个家庭地址或家庭编号;
● 标识变量值相同,非标识变量值不同;例如同一个人或同一个公司,多次或在不同时间购买不同的产品,在记录购买情况的数据文件中,这个人的名字或编号会出现多次。
2. 识别与处理重复观测量的方法
(1)按Data→Identify Duplicate Cases顺序单击菜单项,打开如图2-44所示对话框。
图2-44 观测量查重主对话框
(2) 定义识别重复观测量的根据。
将源变量框中的识别变量移到右边的Define matching cases by框中,这些识别变量值相等的观测量被认为是重复的观测量。可以选择一个也可以选择多个。
系统将按第一个识别变量对数据文件排序,对第一个变量值相同的再按第二个识别变量排序。这两个变量的值都相同的观测量就是读者定义的重复观测量。
系统为标识重复观测量生成一个变量。对重复观测量,该变量的值为0,非重复观测量其值为1。
(3)指定组内排序变量。
在源变量框内选择一个变量送入Sort within matching groups by框内。对符合同一重复条件的观测量组按该变量值排序。可以使用Sort右侧的上下箭头改变排序变量的顺序。
(4)指定组内排序规则。
在Sort栏内的两个单选项中选择一个:Ascending或Descending,即按排序变量值升序还是降序排列组中的观测量。
如果指定了两个排序变量,则在Sort变量栏中选择一个,定义一次升序或降序。有几个排序变量就定义几次。系统默认按排序变量值的升序排列。
(5)指定指针变量的特性。
对经过查重的数据文件,生成一个指针变量,在Variables to Creat栏内指定该指针变量如何标识重复观测。
① Indicator of primary cases (1=unique or primary, 0=duplicate),选择此项,产生的指针变量的值,对不重复的观测其值为1,对重复的观测量中的主观测量,该变量值也为1;对重复的观测量非主观测量(不满足Primary定义的),其值为0。
② 定义重复观测量组中的主观测量的条件。
● Last case in each group is primary,选择此项后变量名为Primary Last,在重复观测量组中,最后一个观测量的指针变量的值为1,其他为0。
● First case in each group is primary,选择此项后变量名为Primary First在重复观测量组中,第一个观测量的指针变量的值为1,其他为0。
● Filter by indicator values,选择此项后用指针变量作为过滤变量,非主重复观测量将从分析中去除,但无须从数据中文件删除。输出的结果和报告与这些观测量无关。也就是说,重复的观测量只留一个参与后续的分析,根据前两个选择项决定是保留排序后的重复观测量的第一个还是保留最后一个。
● Sequential count of matching cases in each group(0=nonmaching case),选择此项,后面的Name栏显示产生另一个变量MatchSequence,它对有n个重复观测量的组中各观测量标1~n的值。每个重复观测量组自行排列。如果指定了排序变量,排列顺序取决于排序变量。如果没有指定排序变量,排列顺序取决于观测量在原始数据文件中的顺序。
● Move matching cases to the top of the file,选择此项,查重执行的结果会把有重复观测量的组移到数据文件的顶部,以便观察。
● Display frequencies for created variables,选择此项,要求生成频数表,包括所生成的新变量各值的计数。例如对主指针变量,频数表给出0值的个数和1值的个数。1值的数目表明数据文件中共有多少个无重复的单一观测量和主观测量。
【例5】数据文件data02-01为有474个观测量雇员情况的数据。变量有:id(雇员编号)、gender(性别)、bdate(出生日期)、educ(受教育年限)、jobcat(职务等级)、salary(当前工资)、salbegin(起始工资)、jobtime(雇用工作月数)、prevexp(以前的工作经历月数)、minority(民族)和age(年龄)。
使用查重功能查看雇员受教育程度、职务的构成以及初始工资情况。操作步骤如下:
(1)按Data→Identify Duplicate Cases顺序单击菜单项,打开对话框。
(2)在源变量框中选择educ、salbegin作为识别变量移到Define matching cases by框中。
(3)在源变量框中选择jobcat、gender、salary送入Sort within matching groups by框内,作为排序变量。
(4) 设置按jobcat降序,gender、salary升序排列。
(5) 定义重复观测量中开始的一个为主观测量,变量名为PrimaryFirst。
(6) 要求生成重复观测量的顺序变量,选择Sequential count of matching cases项,生成的新变量名为MatchSequence。
(7) 选择Display frequencies for created variables项,要求生成频数表。
(8) 选择Move matching cases to the top of the file项,把有重复观测量的组移到数据文件顶部。
提交运行后,结果见表2-2、表2-3和图2-45。
表2-2显示,有重复的观测量共312个,主观测量162个;就是说,一共162组中有重复的测量组合。总观测量数是474个。
表2-2指针变量概况表
表2-3 重复观测量的频数分布表
图2-45 查重后数据排列
表2-3是频数分布表。举例说明各项内容:Valid为6的Frequency是21,Percent为4.4%,Cumulative percent是72.2%,其含义是重复的观测量数为6的组共有21组,占总观测量数的4.4%,自不重复的观测量(Valid为0)到一组有6个重复观测量的观测量总数占总数474的72.2%。
图2-45是查重过程运行结束后的数据窗口。为便于查看,删去了与此例无关的变量。新变量PrimaryFirst和MatchSequence的含义及其各种值的含义也是显而易见的。