在 SPSS 中,在 Do 重复中循环

In SPSS, Loop within a Do repeat

在 SPSS 中进行数据管理时,我试图查看某个人是否在某一天休病假,从索引日期起 1 到 365 天。因此,如果个人在这些日期中的任何一个请病假,我希望在与该日期对应的变量中为“1”(v1-v365)。我尝试了 LOOP- 和 Do Repeat- 命令的不同应用,但必须意识到我并不完全理解其背后的逻辑。

数据:

'''

data list list / ID(F2) Index(F11) Start_Sick(F11) End_Sick(F11).

BEGIN DATA.

1, 13808188800, 13770777600, 13839125500

2, 13837564800, 13705811200, 13839020000

3, 13807497600, 13847548800, 13855017600

4, 13841107200, 13839120000, 13855017600

5, 13830307200, 13847068800, 13855017600

end data.

dataset name MyData WINDOW=FRONT.

Formats Index Start_Sick End_Sick(date11).

VARIABLE LABELS Start_Sick 'Start of a sick leave period'.

VARIABLE LABELS End_Sick 'End of a sick leave period'.

VARIABLE LABELS Index 'Index date'.

''' 我的非工作解决方案: '''

VECTOR v(365).

do repeat t = v1 to v365

 /v = v1 to v365.

LOOP cnt=1 TO 365 by 1.

IF Start_Sick LE datesum(Index,cnt,'days') and End_Sick GE datesum(Index,cnt,'days') t = 1.

END LOOP.

end repeat.

    EXECUTE.

''' 当 运行 我在一个案例的所有 v1 到 v365 中得到 '1' 或全部丢失。我是用错了工具还是用错了工具?

最良好的祝愿, 比约恩

您只需要 loop - 这里的 do repeat 是多余的。 这是您自己的代码,清除了 do repeat 部分并进行了一些调整 - 似乎工作正常:

VECTOR v(365).
LOOP #cnt=1 TO 365 by 1.
IF Start_Sick LE datesum(Index,#cnt,'days') and End_Sick GE datesum(Index,#cnt,'days') v(#cnt) = 1.
END LOOP.
EXECUTE.