在 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.
在 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.