2017-11-11 15 views
2

다음과 같은 상황이 있습니다 : 아래 그림과 같이 하나의 인덱스 변수와 여러 문으로 구성된 루프 (스택 데이터) (미안하지만) 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

Hello Ania, welcome to stackoverflow :) 마음에 떠오르는 가장 중요한 점은 함수의 매개 변수가 인덱스의 값이되는 동적'지연 (lag) '을 사용하는 것입니다. 이걸 테스트하지는 않았지만 각 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

하지 전적으로 데이터 구조가 현실에있을 가능성이 얼마나 변수 확실하지만, 당신이 각 q1_1 to q1_6 당을위한 단 하나의 반응이 곳 demo'ed 같은 경우 응답자 ID, 그 아래에 충분할 것이다 : 또한

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

같은 응답자 ID를 내 중복 인덱스 값의 의미를 모르는,이 의도하거나하지 않은 경우.