滞后于列/变量SPSS

时间:2017-10-13 16:24:59

标签: loops vector repeat spss lag

我想做一些我认为非常简单的事情。 我的(模拟)数据看起来像这样:

enter image description here

data list free/totalscore.1 to totalscore.5.
begin data.
1 2 6 7 10 1 4 9 11 12 0 2 4 6 9   
end data.

这些是在许多试验中累积的总得分(在此模拟数据中,从1到5)。现在我想知道每次试验中获得的分数。换句话说,我想从n + 1试验中减去n试验中的值。 最简单的语法如下所示:

COMPUTE trialscore.1 = totalscore.2 - totalscore.1.
EXECUTE. 

COMPUTE trialscore.2 = totalscore.3 - totalscore.2.
EXECUTE. 

COMPUTE trialscore.3 = totalscore.4 - totalscore.3.
EXECUTE. 

依旧...... 所以结果看起来像这样:

enter image description here

但是,对于200多个变量来说,这样做是不可能也不好玩的。 我尝试使用VECTOR和DO REPEAT编写语法如下:

COMPUTE #y = 1.
VECTOR totalscore = totalscore.1 to totalscore.5. 
DO REPEAT trialscore = trialscore.1 to trialscore.5.
COMPUTE #y = #x + 1. 
END REPEAT. 
COMPUTE trialscore(#i) = totalscore(#y) - totalscore(#i). 
EXECUTE.

但它不起作用。 任何帮助表示赞赏。

聚苯乙烯。我已经研究过使用LAG,但是我需要它来循环遍历行,而我需要它一次超过1列。

2 个答案:

答案 0 :(得分:1)

我假设respid是您原始(唯一)的记录标识符。

修改

如果您没有记录标识符,则可以非常轻松地创建虚拟标识符:

compute respid=$casenum.
exe.

编辑结束

您可以尝试重新构建数据,以便每个分数都是一个独特的记录:

varstocases
/make totalscore from totalscore.1 to totalscore.5
/index=scorenumber
/NULL=keep.
exe.

然后对您的案例进行排序,以便分数按降序排列(以便使用lag函数进行打包):

sort cases by respid (a) scorenumber (d).

然后实际进行基于lag的计算

do if respid=lag(respid).
    compute trialscore=totalscore-lag(totalscore).
end if.
exe.

最后,不进行重组:

casestovars
/id=respid
/index=scorenumber.
exe.

你应该得到一组totalscore个变量(最后一个变量为空),这些变量将保留你需要的变量。

答案 1 :(得分:0)

您可以这样使用do repeat

do repeat 
   before=totalscore.1 to totalscore.4
  /after=totalscore.2 to totalscore.5
  /diff=trialscore.1 to trialscore.4 . 
compute diff=after-before.
end repeat.