首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spss跨变量计数第一个连续零

spss跨变量计数第一个连续零
EN

Stack Overflow用户
提问于 2015-03-17 23:53:44
回答 1查看 199关注 0票数 2

我想要计算一个受试者没有接受治疗的天数(在我的档案中是"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 ...

有人能帮我吗,这里。显然,仅仅计算所有的零是行不通的,因为在一行中可能有多组零。

干杯,迪伦

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 01:57:22

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

代码语言:javascript
复制
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向量将如下所示。

代码语言:javascript
复制
Loc1 Loc2 Loc3 Loc4 Loc5 

  1    4    .    .    . 
  1    3    5    .    . 

现在,计算第一个系列的差值就像下面这样简单:

代码语言:javascript
复制
COMPUTE first_series_zero = Loc2 - Loc1 - 1.

如果从来没有第二次(或第一次)治疗,并且不依赖于day1始终是治疗的第一天,则将返回missing。现在计算所有处理之间的差异非常简单,这里是一个DO REPEAT方法。

代码语言:javascript
复制
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将是第二次和第三次处理之间的零,依此类推(这两个都是重复的,第一个循环可以通过只遍历有效/可能值的循环来提高效率)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29103762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档