【问题标题】:Filtering cases based on response completion根据响应完成过滤案例
【发布时间】:2016-06-10 22:09:35
【问题描述】:

我目前正在尝试清理一个相当大的数据集,但是,我注意到大量参与者未能完成调查,或者甚至没有回答第一个问题。尽管如此,他们的数据还是包含在我的数据集中。

问题:有没有办法根据响应完成过滤掉参与者?例如,我想过滤掉至少 30% 的问题未能提供答复的所有案例。

【问题讨论】:

    标签: filter spss missing-data


    【解决方案1】:

    @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 个或更多缺失答案的受访者的数据就不会用于程序过程,而数据仍保留在数据集中。

    【讨论】:

    • 这更有意义,但是,当我尝试在 syntanx 上运行该脚本时,该脚本无法正常工作。有什么需要下载的吗?
    • 您是否安装了 Python Essentials 插件?它是自 SPSS 22 以来标准安装例程的一部分。我猜对于旧版本的 SPSS,您必须单独安装它。您收到任何错误消息吗?如果有,它说明了什么?
    【解决方案2】:

    @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 之后以新名称保存文件并将其用作工作文件。这样,您可以随时返回原始数据并在需要时再次运行语法并进行更改。

    【讨论】:

      【解决方案3】:

      是的。

      首先,您需要创建一个新变量来计算数据中缺失观测值的数量:

      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)。
      • 好点,@mirirai。但这只有在数据文件中按顺序列出变量时才有效。
      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 2013-08-19
      • 2021-06-03
      • 2014-04-16
      • 1970-01-01
      相关资源
      最近更新 更多