我想要计算一个受试者没有接受治疗的天数(在我的档案中是"0“。如果受试者确实接受了治疗,则用"1“表示。受试者可以接受多个疗程的治疗,我想计算第一次和第二次治疗之间的天数。我对第二次治疗和第三次治疗之间的时间不感兴趣。基本上,我的spss文件如下所示:
id
day1
day2
day3
day4
day28
1
-----0
-----0
----1
------0
-A
0
-----1
----0
------1
-B
-1
C
-etc
我只对第一组零感兴趣。我希望得到的输出是:
id
first_series_zero
A
2
B
1
C
...
有人能帮我吗,这里。显然,仅仅计算所有的零是行不通的,因为在一行中可能有多组零。
干杯,迪伦
发布于 2015-03-17 17:57:22
这里有一个非常通用的方法,可以让你计算所有不同治疗之间的时间。首先,我创建了一个存储所有处理位置的向量Loc1 TO Loc5
(以day1
to 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
始终是治疗的第一天,则将返回missing。现在计算所有处理之间的差异非常简单,这里是一个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
将是第一次和第二次处理之间的零,DifS2
将是第二次和第三次处理之间的零,依此类推(这两个都是重复的,第一个循环可以通过只遍历有效/可能值的循环来提高效率)。
https://stackoverflow.com/questions/29103762
复制相似问题