2016-05-22 7 views
2

私はSPSSに約15%の回答者がアンケートに何度も回答した(これは意図しない)私はどのケースを維持するかを決定する体系的な方法を策定しましたが、このタスクを実行するためにループを書く方法はわかりません。SPSS構文 - 重複した回答を特定し、維持するケースを体系的に特定する

私がしているしている変数:

  • ID:0/1(完全な調査です)
  • 重複:0/1全ての
  • SurveyComplete(いくつかの繰り返し提出)個々の一意の識別子
  • PrimaryFirst:0/1(最初の提出を識別する)
  • MatchSequence:整数(数値のインジケータが調査の送信番号であること)
  • 日:提出日
  • キープ:ここ

は私のデータがどのように見えるかです0/1(まだツー・作成されたレコードが保持されているかどうかの指標を):

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、SurveyComplete = 1 THEN続ければ

  1. このIDの他のサブミットは0です。
  2. ELSE IFプライマリ= 0 AND SurveyComplete = 1このIDの他のサブミットは0です。
  3. ELSE(SurveyComplete = 0 )最近の提出を維持する。私の仕事は、ソフトウェアのアドオンに親切に取らないと理想的には、私は、プラグインなしでSPSSの構文でこれを完了できるようにしたいと思い

    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 
    

そして、ここに列を保つ結果です。提供できるヘルプは非常に高く評価されています。

答えて

0

各ステップの後、決定が既に行われた場合、すべてのIDに対してAGGREGATE関数が決定します。すでに決定を下した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. 
+0

ありがとうございました!あなたは私のために一つのことを明確にしてください。/decideコマンドは集約コマンドの一部ではないようです。これは集計コマンドの外側で計算する必要がある別の行ですか? –

+0

もう1つ質問があります。次の完全な調査を続けることを決定している2番目の構文では、すべての完全な調査を維持することになります(つまり、調査1が完了していないが、2と3があれば、2私はちょうど2を保ちたいと思っているときは、両方とも保つようにしてください。前もって感謝します! –

+0

問題の修正を追加しました - この追加の詳細を含めるために質問を更新することを検討してください。 –

関連する問題