我想计算一个受试者没有接受治疗的日子(我的文件中为“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
在这里,任何人都可以帮助我。显然,只计算所有的零是行不通的,因为一行中可能有多组零。
干杯,迪伦
答案 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次治疗之间的零等。(两者都重复,第一次循环可以制作使用仅超过有效/可能值的循环更有效。)