利用SPSS消除录入误差的方法共20页word资料.docx
《利用SPSS消除录入误差的方法共20页word资料.docx》由会员分享,可在线阅读,更多相关《利用SPSS消除录入误差的方法共20页word资料.docx(16页珍藏版)》请在冰豆网上搜索。
![利用SPSS消除录入误差的方法共20页word资料.docx](https://file1.bdocx.com/fileroot1/2022-12/31/b2d88f77-190f-4b64-b2e7-c346db29a1a0/b2d88f77-190f-4b64-b2e7-c346db29a1a01.gif)
利用SPSS消除录入误差的方法共20页word资料
利用SPSS消除录入误差的方法
唐宋或更早之前,针对“经学”“律学”“算学”和“书学”各科目,其相应传授者称为“博士”,这与当今“博士”含义已经相去甚远。
而对那些特别讲授“武事”或讲解“经籍”者,又称“讲师”。
“教授”和“助教”均原为学官称谓。
前者始于宋,乃“宗学”“律学”“医学”“武学”等科目的讲授者;而后者则于西晋武帝时代即已设立了,主要协助国子、博士培养生徒。
“助教”在古代不仅要作入流的学问,其教书育人的职责也十分明晰。
唐代国子学、太学等所设之“助教”一席,也是当朝打眼的学官。
至明清两代,只设国子监(国子学)一科的“助教”,其身价不谓显赫,也称得上朝廷要员。
至此,无论是“博士”“讲师”,还是“教授”“助教”,其今日教师应具有的基本概念都具有了。
一、统计分析中的录入误差
要练说,得练听。
听是说的前提,听得准确,才有条件正确模仿,才能不断地掌握高一级水平的语言。
我在教学中,注意听说结合,训练幼儿听的能力,课堂上,我特别重视教师的语言,我对幼儿说话,注意声音清楚,高低起伏,抑扬有致,富有吸引力,这样能引起幼儿的注意。
当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。
平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。
任何一项社会调查都不可能完全准确地描述社会生活的原貌,也就是说不论采用什么样的方法,调查误差总是存在的。
但调查的误差应当是越小越好。
只有把误差控制在调查精度要求的范围之内,调查才是有价值的。
死记硬背是一种传统的教学方式,在我国有悠久的历史。
但随着素质教育的开展,死记硬背被作为一种僵化的、阻碍学生能力发展的教学方式,渐渐为人们所摒弃;而另一方面,老师们又为提高学生的语文素养煞费苦心。
其实,只要应用得当,“死记硬背”与提高学生素质并不矛盾。
相反,它恰是提高学生语文水平的重要前提和基础。
如果调查的样本是一个随机样本,则误差主要来自两个方面:
一是工作误差,二是随机误差。
从理论上说,随机误差可以通过扩大样本来减少。
样本越大,随机误差就越小;样本等于总体时,随机误差为零。
工作误差包括三方面:
一是登记误差,二是录入误差,三是计算误差。
使用计算机进行统计分析能基本上消除计算误差。
登记误差是指调查员在登记调查表时的错误登记,或是被调查者在填写问卷时的错误填答。
这部分误差是无法计算的,也没有什么技术手段可以消除,只能通过选择高水平的访问员,加强培训,制定严格的规范,进行严格的督导等手段来尽可能地减少。
录入误差是指在计算机录入时,由于录入错误造成的误差。
在计算机录入的过程中,录入误差是不可避免的。
每个人不论其工作的精确度多么高,都会或多或少地产生错误。
根据我们的经验,一个人的录入错误率平均说来约为1%左右。
如果某次调查的样本数为1000,每份问卷中包含100个变量的话,录入的错误数据将为1000*100*1%=1000个左右。
这些错误的数据如果不被剔除的话,将会严重影响计算结果的准确性。
尤其是一些远离数据有效取值范围的离群值对计算结果的干扰性更大。
因此,做定量分析的研究者都非常重视数据录入的准确性。
二、减少录入误差的常用方法及其缺点
目前社会学界采用的减少录入误差的方法主要有校对法与非法值检验法,但这两种方法都存在一些问题。
下面我们分别加以分析。
1.校对法
校对法是多年来一直使用的方法,是在数据录入计算机之后,由录入员或研究人员将原始资料与计算机中的资料一一对比地进行校对。
这种方法的缺点是:
第一,精确性低。
校对仍然是人工性的工作,由于工作人员的工作态度、身体状况、技术水平等多方面原因,校对工作中人的工作误差仍难以避免。
同时,长时间的校对所造成的视觉疲劳也会大大降低校对的精度。
经过一次校对,根本不能达到消除录入误差的目的。
因此,对于精确度要求很高的调查来说,要进行二校甚至三校。
即使进行多次校对之后,到底还剩下多少错误录入的数据,研究者和录入者心里并不清楚。
第二,花费时间长。
校对一次所花费的时间与录入一次所花费的时间基本相同。
有时甚至比录入花费的时间还要长。
第三,成本高。
校对一次所花费的人力与录入一次基本相同,如果为保证精度的需要而进行二校甚至三校的话,需要花费的人力和时间就更多。
这样做的结果,是大大增加了录入成本。
2.非法值检验法
社会调查中的任何一个变量都有着确定性的取值范围。
在取值范围之内的数据称为合法值,而在取之范围之外的数据称为非法值。
如果录入的数据值是在合法的取值范围之外,这个数据就被视为非法数据。
通过检查某一个数据是否在合法的取值范围内,可以部分地确定该数据的录入是否正确。
用SPSS制作一个变量的频数分布表,可以看出该变量录入了多少个非法值。
如果将数据库根据此变量进行排序,则可以将该变量录入了非法值的个案集中起来进行修改。
这种检验和纠错的方法跟校对法相比,由于省去了一一对比的过程,能节省很多人力和时间。
但这样做的结果只是找到了在合法值取值范围以外的录入错误。
如果录入的错误数据在合法值的取值范围之内,用这种方法就无法检查出来。
三、利用SPSS消除录入误差的方法
1.基本思想
笔者在用SPSS进行录入和统计分析的过程中摸索出了一套操作简单,行之有效的减少甚至基本消除录入误差的方法。
利用SPSS消除录入误差的方法可以概括为八个字:
并行录入,对比纠错。
并行录入是指:
问卷统一编号以后,由两名录入员按照同样的数据表格式各录入一次。
对比纠错是指:
将两个人录入的同一个数据进行对比,如果相同则认为两个人的录入都正确;如果不同,则至少有一个人的录入是错误的,需要对照问卷纠错。
用这种方法很容易找到录入错误的数值,且由于对比过程可以由计算机来实现,不仅省去了一一校对的麻烦,而且大大提高了纠错的精确性。
2.实际操作过程
(1)并行录入
在录入前必须把所有的问卷编号,使每一份问卷有一个唯一号。
在录入时,问卷编号必须作为一个变量录入计算机。
并行录入时,要求两位录入员所用的变量名、变量的各种设置、变量名标签(lable)、变量值标签(values)等必须完全相同。
最好的方法是变量制作完以后,以不同的文件名拷贝成两分,由两位录入员使用变量设置完全相同的数据文件进行录入。
录入结束后,应按照问卷编号对数据进行排序。
(2)对比纠错
假如是A、B两个人进行录入。
把A录入的数据文件称为文件A,B录入的称为文件B。
对比纠错的过程是:
先在文件A所有变量名的后面加一个共同的字符,在文件B所有变量名的后面加另一个共同的字符。
这样既使文件B的变量名与文件A的变量名相区别,又便于对两个文件中相应的变量作比较。
作此修改后,将文件B的全部数据以添加变量的方式添加到文件A中(用SPSS中的MergeFiles功能中的AddVariables指令)。
这样在文件A中的变量数就成为原来的两倍,而且每一个变量都有一个变量名只相差一个字符的另一个变量与之相对应。
然后用SPSS中Transform的下拉菜单中的Compute指令。
在Compute对话框中把每对相互对应的变量进行比较,并以比较的结果生成新的变量。
我们把这个新变量称为纠错变量。
在纠错变量的取值中,只有缺失和1两种情况。
当两个人录入的值相同时,纠错变量的值设为缺失。
当两个人录入的值不同时,纠错变量的值为1。
根据这个1在SPSS数据窗口中的位置,很容易找到生成这个纠错变量的原变量,进而确定错误录入的位置。
并根据这个1所对应的问卷编号找到该份问卷,来纠正录入错误。
四、用SPSS实现计算机自动对比数据的方法
上面介绍的手工操作过程对于变量数少,个案数多的数据文件应用起来比较方便。
如果变量数很多,手工操作仍很麻烦。
为此,我们编制了几个简单的SPSS程序,以简化对比纠错的过程。
下面介绍纠错的方法并给出所用的程序。
本方法的程序由三部分构成:
(1)预程序;
(2)主程序;(3)附加程序。
三个程序均在SPSS的Syntax窗口中运行。
其中主程序的基本思想与上述的手工操作的思路一致,即:
对独立录入但结构相同的两份数据文件A与B的变量名略作变化后,用MergeFiles指令加以合并,将源自A的数据一一跟源自B的相应数据进行对比,生成一个纠错变量。
纠错变量的值标示出A与B的数据是否相符,这样便可以对照原始问卷对不相符的地方进行纠错。
主程序还具有如下功能:
(1)自动使A中每一个变量与B中相应的变量及通过二者对比生成的纠错变量相邻,从而使对照问卷纠错时方便得多。
(2)对多种变量类型(如数值型、文字型、日期型变量)都能一次性地自动进行比较并生成相应的纠错变量。
对照问卷纠错的工作结束后,可以运行附加程序,使数据文件恢复到原先的结构,即只保留纠正过的数据文件的变量,而去掉来自另一文件的变量与纠错变量。
在变量很多的情况下,主程序与附加程序都会包含大量的指令行。
这些指令如果都手工编写,一是工作量大,二是容易因疏忽而出错。
预程序的作用,是根据数据文件的Dictionary中的变量名称与变量类型的信息,自动写出主程序与预程序所需的绝大多数指令行,只需在预程序输出结果的基础上略加编辑,就可形成主程序与附加程序。
五、用SPSS实现计算机自动对比数据的操作过程
1.运行该程序的条件
运行下面给出的程序时,要求用户必须做到以下四点:
(1)要对比的两个数据文件必须有完全相同的变量名和变量类型;
(2)两个数据文件的个案(Case)数及其顺序必须相同(因为如果计算机将不同的个案进行比较,将会标出很多“错误”),这可以通过用上面第三部分介绍的手工操作方法先对问卷编号这一变量进行检查来实现;
(3)这两个文件必须均在计算机C盘的根目录下,文件名分别为Data1.sav与Data2.sav(如果数据文件名或其所在位置不同,就需要对下面程序中所用的数据文件的名称与路径作相应的修改);
(4)两个数据文件中每个变量的变量名不能超过19个字节(每个汉字相当于2个字节)。
作第四条要求,是想让整个对比纠错过程中来自Data1.sav和Data2.sav的变量及纠错变量的变量名长度不超过20。
如果Data1.sav和Data2.sav中有名称更长的变量,需要对下面的程序作适当调整,将第四条要求放宽到变量名不超过63字节,而整个纠错过程中有关变量名不超过64字节(SPSS15.0允许的最长的变量名)。
之所以保留一个字节,是因为,为了确保在SPSS自动执行MergeFiles操作及生成纠错变量时不会出现相同的变量名,计算机在执行下面程序的过程中,自动将Data1.sav中的变量名都加上“1”的后缀,将Data2.sav中的变量名都加上“2”的后缀,而纠错变量的变量名统一由原数据文件中的变量名加上“3”的后缀生成,这样就能保证变量名不会相重。
下面,我们给出实际的程序及操作。
为叙述简单起见,我们假定Data1.sav与Data2.sav只有六个变量,即Numeric_A、String_B、Date_C及“数值型变量D”、“字符型变量E”、“日期型变量F”组成,其中Numeric_A与“数值型变量第四”为数值型变量,String_B与“字符型变量第五”为字符型变量,而Date_C与“日期型变量第六”为日期型变量。
当然,一个实际的数据文件的变量数一般会多得多,但这只影响到下面程序中用粗体字标出的部分——每增加一个变量每个粗体部分的指令便会相应地增加一行。
2.预程序的生成及运行
在SPSS中打开数据文件Data1.sav,在File下拉菜单中选择New,在弹出菜单中选择Syntax,这时会出现一个SPSS的Syntax编辑窗口(Syntax1)。
在此窗口中输入如下指令:
displayvariables.
运行此指令(在Run的下拉菜单中选择All),这时会出现一个显示运行结果的窗口Output1,其中有下面这个目标:
VariableInformation
Variable
Position
Label
MeasurementLevel
PrintFormat
WriteFormat
Numeric_A
1
Scale
F8.2
F8.2
String_B
2
Nominal
A8
A8
Date_C
3
Scale
ADATE8
ADATE8
数值型变量D
4
Scale
F8.2
F8.2
字符型变量E
5
Nominal
A8
A8
日期型变量F
6
Scale
ADATE10
ADATE10
Variablesintheworkingfile
将此目标拷到一个Word文档中,删掉表格之外的文字及表格中除Variable和MeasurementLevel外的所有列,再删掉第一行,得到如下结果:
Numeric_A
Scale
String_B
Nominal
Date_C
Scale
数值型变量D
Scale
字符型变量E
Nominal
日期型变量F
Scale
在SPSS中打开一个新的数据窗口,将其第一和第二个变量分别设为长度为20和8的字符型(String)变量(变量名可接受SPSS自动生成的VAR00001和VAR00002),而后在数据编辑窗口下将上面删除冗余信息后的表中的数据拷贝到此数据窗口中,再在SPSS中将这些数据全部选中,拷回到Word中,得到如下结果:
Numeric_AScale
String_BNominal
Date_CScale
数值型变量DScale
字符型变量ENominal
日期型变量FScale
再增加一些指令行,编辑成如下的预程序:
datalistnotable/vn1-19(a)vt26-32(a).
begindata
Numeric_AScale
String_BNominal
Date_CScale
数值型变量DScale
字符型变量ENominal
日期型变量FScale
enddata.
stringvn1vn2vn3(a20).
computevn1=concat(rtrim(vn,""),"1").
computevn2=concat(rtrim(vn,""),"2").
computevn3=concat(rtrim(vn,""),"3").
stringv1v2v3(a40).
computev1=concat(rtrim(vn,""),"=",rtrim(vn,""),"1").
computev2=concat(rtrim(vn,""),"=",rtrim(vn,""),"2").
computev3=concat(rtrim(vn1,""),"=",vn).
print/v1.
execute.
print/v2.
execute.
doifvt="Nominal".
print/"if",vn1,"<>",vn2,vn3,"=1.".
else.
print/"if",vn1,"<>",vn2,"ormissing(",vn1,")+missing(",vn2,")=1",vn3,"=1.".
endif.
execute.
print/vn2,"",vn3,"",vn1.
execute.
print/vn1.
execute.
print/v3.
execute.
其中加粗部分表示由displayvariables指令生成的内容。
需要注意的是,这部分与其前面的begindata及其后面的enddata.指令行之间都不能留下空行,否则运行此程序得到的输出会多出来一些内容,给编辑主程序及附加程序都带来不必要的麻烦。
此外,加粗部分的指令行必须完全按照上面的步骤获取,除上面说的编辑过程外不再作任何增删,保证每行的开头没有空格,行中的空格(含有一个制表符)也不能增删,这样才能保证此程序正确地读取每个变量的名称与类型。
接下来将预程序拷到Syntax1中,覆盖原有指令,然后运行预程序,这样会生成一个临时数据文件,并在Output1中生成如下的输出结果:
datalistnotable/vn1-19(a)vt26-32(a).
begindata
Numeric_AScale
String_BNominal
Date_CScale
数值型变量DScale
字符型变量ENominal
日期型变量FScale
enddata.
stringvn1vn2vn3(a20).
computevn1=concat(rtrim(vn,""),"1").
computevn2=concat(rtrim(vn,""),"2").
computevn3=concat(rtrim(vn,""),"3").
stringv1v2v3(a40).
computev1=concat(rtrim(vn,""),"=",rtrim(vn,""),"1").
computev2=concat(rtrim(vn,""),"=",rtrim(vn,""),"2").
computev3=concat(rtrim(vn1,""),"=",vn).
print/v1.
execute.
Numeric_A=Numeric_A1
String_B=String_B1
Date_C=Date_C1
数值型变量D=数值型变量D1
字符型变量E=字符型变量E1
日期型变量F=日期型变量F1
print/v2.
execute.
Numeric_A=Numeric_A2
String_B=String_B2
Date_C=Date_C2
数值型变量D=数值型变量D2
字符型变量E=字符型变量E2
日期型变量F=日期型变量F2
doifvt="Nominal".
print/"if",vn1,"<>",vn2,vn3,"=1.".
else.
print/"if",vn1,"<>",vn2,"ormissing(",vn1,")+missing(",vn2,")=1",v
n3,"=1.".
endif.
execute.
ifNumeric_A1<>Numeric_A2ormissing(Numeric_A1
)+missing(Numeric_A2)=1Numeric_A3=1.
ifString_B1<>String_B2String_B3=1.
ifDate_C1<>Date_C2ormissing(Date_C1
)+missing(Date_C2)=1Date_C3=1.
if数值型变量D1<>数值型变量D2ormissing(数值型变量D1
)+missing(数值型变量D2)=1数值型变量D3=1.
if字符型变量E1<>字符型变量E2字符型变量E3=1.
if日期型变量F1<>日期型变量F2ormissing(日期型变量F1
)+missing(日期型变量F2)=1日期型变量F3=1.
print/vn2,"",vn3,"",vn1.
execute.
Numeric_A2Numeric_A3Numeric_A1
String_B2String_B3String_B1
Date_C2Date_C3Date_C1
数值型变量D2数值型变量D3数值型变量D1
字符型变量E2字符型变量E3字符型变量E1
日期型变量F2日期型变量F3日期型变量F1
print/vn1.
execute.
Numeric_A1
String_B1
Date_C1
数值型变量D1
字符型变量E1
日期型变量F1
print/v3.
execute.
Numeric_A1=Numeric_A
String_B1=String_B
Date_C1=Date_C
数值型变量D1=数值型变量D
字符型变量E1=字符型变量E
日期型变量F1=日期型变量F
其中加粗的部分是将要用作下面主程序与附加程序的指令行。
加粗并斜体的部分也是有用的指令行,但由于太长,SPSS在将其输出时把有的行断成了两行(这部分的指令行应该都是以if起头的,否则就是因为被断开了)。
可将指令行断开处的分行符删去,这时一个指令行在Word中可能还是显示为两行,但因为没有断行的分行符,在后面作为SPSS指令运行时会被当作一个指令行来处理。
此外,如果数据库的变量比较多,上面的指令运行后输出到输出文件中的结果会很长,SPSS会对其进行分页。
分页处有个红色的小三角形及几个空行。
结果拷到Word后,这三角形与空行都应予以删除。
将上述结果加黑的部分保留下来,共有六部分指令行。
对于我们所用的简单的数据文件来说,每部分共6行(每行对应于原数据文件的一个变量),分别如下所示:
Numeric_A=Numeric_A1
String_B=String_B1
Date_C=Date_C1
数值型变量D=数值型变量D1
字符型变量E=字符型变量E1
日期型变量F=日期型变量F1
Numeric_A=Numeric_A2
String_B=String_B2
Date_C=Date_C2
数值型变量D=数值型变量D2
字符型变量E=字符型变量E2
日期型变量F=日期型变量F2
ifNumeric_A1<>Numeric_A2ormissing(Numeric_A1)+missing(Numeric_A2)=1Numeric_A3=1.
ifString_B1<>String_B2String_B3=1.
ifDate_C1<>Date_C2ormissing(Date_C1)+missing(Date_C2)=1Date_C3=1.
if数值型变量D1<>数值型变量D2ormissing(数值型变量D1)+missing(数值型变量D2)=1数值型变量D3=1.
if字符型变量E1<>字符型变量E2字符型变量E3=1.
if日期型变量F1<>日期型变量F2ormissing(日期型变量F1)+missing(日期型变量F2)=1日期型变量F3=1.
Numeric_A2Numeric_A3Numeric_A1
String_B2String_B3String_B1
Date_C2Date_C3Date_C1
数值型变量D2数值型变量D3数值型变量D1
字符型变量E2字符型变量E3字符型变量E1
日期型变量F2日期型变量F3日期型变量F1
Numeric_A1
String_B1
Date_C1
数值型变量D1
字符型变量E1
日期型变量F1
Numeric_A1=Num