【发布时间】:2016-06-10 22:09:35
【问题描述】:
我目前正在尝试清理一个相当大的数据集,但是,我注意到大量参与者未能完成调查,或者甚至没有回答第一个问题。尽管如此,他们的数据还是包含在我的数据集中。
问题:有没有办法根据响应完成过滤掉参与者?例如,我想过滤掉至少 30% 的问题未能提供答复的所有案例。
【问题讨论】:
标签: filter spss missing-data
我目前正在尝试清理一个相当大的数据集,但是,我注意到大量参与者未能完成调查,或者甚至没有回答第一个问题。尽管如此,他们的数据还是包含在我的数据集中。
问题:有没有办法根据响应完成过滤掉参与者?例如,我想过滤掉至少 30% 的问题未能提供答复的所有案例。
【问题讨论】:
标签: filter spss missing-data
@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 个或更多缺失答案的受访者的数据就不会用于程序过程,而数据仍保留在数据集中。
【讨论】:
@maxwelldeux 关于使用 COUNT 是正确的,但是您需要计算缺失的数字变量和空文本变量(文本变量在为空时不一定定义为缺失)。所以:
COUNT countmiss = numvar1 numvar2 numvar3 numvar4 numvar5 (MISSING)
textVar1 textVar2 textVar3 textVar4 textVar5 ("").
此时您可以按照@maxwelldeux 的建议过滤文件,如果您想在文件中保留空(或几乎空)行,而不是将它们包含在分析中。 如果您确定不将哪些参与者包含在文件中,您可以使用:
SELECT IF countmiss < 20./* pick your best suited limit instead of "20".
不过,请确保在 SELECT 之后以新名称保存文件并将其用作工作文件。这样,您可以随时返回原始数据并在需要时再次运行语法并进行更改。
【讨论】:
是的。
首先,您需要创建一个新变量来计算数据中缺失观测值的数量:
COUNT
countmiss = v1 v2 v3 v4 v5 v6 (MISSING).
然后,您需要过滤掉错过指定数量回复的参与者(这里,我将过滤掉错过两次回复的参与者):
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.
请注意,第二步可以通过 Data -> Select Cases 菜单来实现。
【讨论】:
COUNT 命令中:您也可以编写v1 TO vn,而不是输入完整的变量列表(v1 v2 ... vn)。