spss计算变量的第一个连续零

时间:2015-03-17 15:53:44

标签: count rows spss distinct-values

我想计算一个受试者没有接受治疗的日子(我的文件中为“0”。如果受试者确实接受了治疗,则表示为“1”。受试者可以接受多个治疗过程,我希望计算第一次和第二次治疗之间的天数。我(还)对第二次和第三次治疗之间的时间感兴趣。 基本上我的spss文件看起来像这样:

id day1 day2 day3 day4 day28
A --- 1 ----- 0 ----- 0 ---- 1 ------ {{ 1}}
0 --- B ---- 1 ----- 0 ---- 1 ------ {{1 }}
0 --- 1

我只对第一系列零感兴趣。我希望获得的输出是:

C etc
id first_series_zero
A 2
B 1

在这里,任何人都可以帮助我。显然,只计算所有的零是行不通的,因为一行中可能有多组零。

干杯,迪伦

1 个答案:

答案 0 :(得分:1)

这是一种非常通用的方法,可以让您计算所有不同治疗方法之间的时间。首先,我创建一个存储所有处理的位置的向量,Loc1 TO Loc5(以day1为例day5

DATA LIST FREE / day1 day2 day3 day4 day5.
BEGIN DATA
1 0 0 1 0
1 0 1 0 1
END DATA.

VECTOR day = day1 TO day5.
VECTOR Loc(5,F2.0).
COMPUTE #id = 1.
LOOP #i = 1 TO 5.
  DO IF day(#i) = 1.
    COMPUTE Loc(#id) = #i.
    COMPUTE #id = #id + 1.
  END IF.
END LOOP.

现在,如果您运行此转换,Loc向量对于此示例数据将如下所示。

Loc1 Loc2 Loc3 Loc4 Loc5 

  1    4    .    .    . 
  1    3    5    .    . 

现在计算第一个系列的差异就像:

COMPUTE first_series_zero = Loc2 - Loc1 - 1.

如果从未进行过第二次(或第一次)治疗,这将返回缺失,并且不依赖day1始终是治疗的第一天。现在计算所有处理之间的差异非常简单,这里采用DO REPEAT方法。

VECTOR DifS(4,F2.0).
DO REPEAT F = Loc1 TO Loc4 /B = Loc2 TO Loc5 /D = DifS1 TO DifS4.
  COMPUTE D = B - F - 1.
END REPEAT.

所以DifS1将是第1次和第2次治疗之间的零,DifS2将是第2次和第3次治疗之间的零等。(两者都重复,第一次循环可以制作使用仅超过有效/可能值的循环更有效。)