我目前正在尝试清理一个相当大的数据集,但是,我注意到有相当数量的参与者未能完成调查,或者甚至没有回答第一个问题。然而,他们的数据包含在我的数据集中。
问题:有没有办法根据响应完成过滤掉参与者?例如,我想过滤掉所有未能对至少30%的总问题做出回应的案例。
提前致谢!
答案 0 :(得分:4)
是
首先,您要创建一个新变量来计算数据中缺失观察的数量:
USE ALL.
COMPUTE filter_$=(countmiss >= 2).
VARIABLE LABEL filter_$ countmiss >= 2 (FILTER)'.
VALUE LABELS filter_$ 0 'Not Selected' 1 'Selected'.
FORMAT filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
然后,您想要过滤掉错过指定数量的回复的参与者(在这里,我将过滤掉错过两个回复的人):
-
请注意,第二步可以通过数据实现 - >选择案例菜单。
答案 1 :(得分:3)
@ eli-k提出了一个重点。
如果你有一个包含大量变量的数据集,并且你想保存自己输入一长串变量名,你可以借助Python插件动态生成一个数值变量列表和一个字符串变量(其中必须安装)。
以下代码创建了两个宏"!numericvars"和"!stringvars"。调用时,它们将扩展到相应的变量列表。
BEGIN PROGRAM.
import spss
#create separate strings of numeric and string variables
numericvars=''
stringvars=''
varcount=spss.GetVariableCount()
for i in xrange(varcount):
if spss.GetVariableType(i) > 0:
stringvars=stringvars + " " + spss.GetVariableName(i)
else:
numericvars=numericvars + " " + spss.GetVariableName(i)
# define macro variables for the numeric and the string variable lists
spss.SetMacroValue("!numericvars", numericvars)
spss.SetMacroValue("!stringvars", stringvars)
END PROGRAM.
(我已经从spss.SetMacroValue syntax reference page的例子中获取了大部分代码)
在COUNT
命令中,您只需键入宏名称而不是整个变量列表。
COUNT countmiss = !numericvars (MISSING)
!stringvars ("").
然后你可以使用@ eli-k提出的SELECT IF
命令。
SELECT IF countmiss < 20./* pick your best suited limit instead of "20".
这将从您的数据集中永久删除所有包含20个或更多遗失答案的案例。
或者您可以使用@maxwelldeux建议的FILTER BY
命令:
COMPUTE filter_$ = (countmiss<20).
FILTER BY filter_$.
在这种情况下,只要过滤器处于活动状态,来自具有20个或更多缺失答案的受访者的数据将不会用于程序过程,而数据仍保留在数据集中。
答案 2 :(得分:2)
@maxwelldeux关于使用COUNT是正确的,但您需要计算缺少的数字变量和空文本变量(文本变量在空时必须定义为缺失)。所以:
.nice()
此时,您可以将文件过滤为@maxwelldeux建议,如果您想在文件中保留空(或接近空)行,只是不要将它们包含在分析中。 如果您确定哪些参与者不会包含在文件中,您可以使用:
COUNT countmiss = numvar1 numvar2 numvar3 numvar4 numvar5 (MISSING)
textVar1 textVar2 textVar3 textVar4 textVar5 ("").
但是,确保在SELECTing之后,使用新名称保存文件并将其用作工作文件。这样,如果需要,您可以随时返回原始数据并再次运行语法。