2017-11-11 6 views
2

以下のような状況があります:1つのインデックス変数のみを持つループ(スタックデータ)と、 )Excelはあるが、SPSSと同じである: stack data - cases on multiple lines, but never filling for 1 respondent all the columnsSPSSでcaseまたはcasestovarを使用せずにデータをスタックして再構成する

それが空の多くの変数を作成しますので、私は、次のような状況になく、再構築するcasestovarsを使用せずに到達したいです。これに到達するには

ID Index Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6 
1 1  1 1  
1 2    1 1 
1 3       1  1 

:ここから始まると同様 reducing the cases per respondent

私はそれは次のような結果に到達するために、例を上に移動されたアップデートのようなコマンドであった旧バージョンのために覚えています
ID Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6 
1 1 1 1 1  1 1 

ただし、casestovarsは使用しません。これのためにSPSS構文のコマンドがありますか?

ありがとうございました。素敵な一日を!

+1

こんにちはAnia、歓迎stackoverflow :)最初に頭に浮かぶのは、関数のパラメータがインデックスの値になる動的な「遅れ」を使うことです。しかし、これをテストしていない、私は別に各IDのためにこれを行う方法がわかりません –

答えて

1

次の構文は、仕事をすることができ - あなたのデータ構造が現実になる可能性があるどのように変数

* first we'll recreate your example data. 
data list list/respid index q1_1 to q1_6. 
begin data 
1,1,1,,,,, 
1,2,,2,,,, 
1,3,,,1,,, 
1,4,,,,2,, 
1,5,,,,,1, 
1,6,,,,,,2 
2,1,3,,,,, 
2,1,,4,,,, 
2,2,,,5,,, 
2,2,,,,4,, 
2,3,,,,,3, 
2,3,,,,,,2 
end data. 

* now to work: first thing is to make sure the data from each ID are together. 
sort cases by respid index. 

* the loop will fill down the data to the last line of each ID. 
do repeat qq=q1_1 to q1_6. 
if respid=lag(respid) and missing(qq) qq=lag(qq). 
end repeat. 

* the following lines will help recognize the last line for each ID and select it. 
compute lineNR=$casenum. 
aggregate /outfile=* mode=ADDVARIABLES/break=respid/MXlineNR=max(lineNR). 
select if lineNR=MXlineNR. 
exe. 
2

全くわからないけどdemo'edとして、各q1_1 to q1_6あたりの唯一の単一の応答を持っている場合回答者ID、その後、以下で十分であろう。また

dataset declare dsAgg. 
aggregate outfile="dsAgg" /break=respid /q1_1 to q1_6=max(q1_1 to q1_6). 

同じ回答者のID内の重複したインデックス値の意味がわからない、これは意図されたかどうか。

関連する問題