SPSS 语法 - 识别重复的响应并系统地识别要保留的案例

SPSS Syntax - Identify duplicate responses and systematically identify cases to keep

我在 SPSS 中有大量调查数据,其中大约 15% 的受访者不止一次回答了调查(这不是故意的)。我已经制定了一个系统的方法来确定要保留哪些情况,但我不确定如何编写循环来执行此任务。

我的变量是:

这是我的数据:

ID  SurveyComplete  Duplicate  PrimaryFirst  MatchSequence    Date   keep
123       1             1            1             1        07162015  .
123       1             1            0             2        07182015  .
456       0             1            1             1        07152015  .
456       1             1            0             2        07192015  .
789       0             1            1             1        07112015  .
789       0             1            0             2        07182015  .
789       0             1            0             3        07212015  .
012       1             0            1             1        07122015  .

理论上,我想按以下顺序确定:

  1. IF Primary = 1 AND SurveyComplete = 1 THEN keep = 1。此 ID 的其他提交保持 = 0。
  2. ELSE IF Primary = 0 AND SurveyComplete = 1 THEN keep = 1。此 ID 的其他提交保持 = 0。
  3. ELSE(其中所有回复的 SurveyComplete = 0)保留最近的提交。

这是生成的保留列:

ID  SurveyComplete  Duplicate  PrimaryFirst  MatchSequence    Date   keep
123       1             1            1             1        07162015  1
123       1             1            0             2        07182015  0
456       0             1            1             1        07152015  0
456       1             1            0             2        07192015  1
789       0             1            1             1        07112015  0
789       0             1            0             2        07182015  0
789       0             1            0             3        07212015  1
012       1             0            1             1        07122015  1

理想情况下,我希望能够在没有插件的情况下使用 SPSS 语法完成此操作,因为我的工作不太适合附加软件。非常感谢可以提供的任何帮助!

在每一步之后,聚合函数都会为每个 ID 确定是否已经做出决定。已经决定的ID将被淘汰出局,未决定的ID进入下一步:

* creating fake data to play around with.
* note I added an extra line for ID=456 to demonstrate choice between multiple non-primary lines.

DATA LIST list (", ") / ID SurveyComplete Duplicate PrimaryFirst MatchSequence Date.
        begin data
        123, 1, 1, 1, 1, 7162015
        123, 1, 1, 0, 2, 7182015
        456, 0, 1, 1, 1, 7152015
        456, 1, 1, 0, 2, 7192015
        456, 1, 1, 0, 3, 7192015
        789, 0, 1, 1, 1, 7112015
        789, 0, 1, 0, 2, 7182015
        789, 0, 1, 0, 3, 7212015
        12, 1, 0, 1, 1, 7122015
        end data.
        execute.

* now starting work on defining the KEEP variable.

        if (PrimaryFirst = 1 AND SurveyComplete = 1) keep=1.
        if (PrimaryFirst = 0 AND SurveyComplete = 1) NotPrimarySeq=MatchSequence.
        aggregate /outfile=* mode=addvariables /break=ID /decided=max(keep)/NotPrimarySeq_min=min(NotPrimarySeq).

        if missing(decided) and (PrimaryFirst = 0 AND SurveyComplete = 1) keep=(NotPrimarySeq=NotPrimarySeq_min).
        aggregate/outfile=* mode=addvariables overwritevars=yes /break=ID/decided=max(keep)/Date_max=MAX(Date).

        if missing(decided) keep=(date=date_max).
        recode keep (miss=0).
        execute.