SPSS中使用LOOP与DO REPEAT生成病假每日标识变量问题
问题原因分析
你遇到的问题属于命令使用方式错误,核心问题有两点:
- 对
LOOP和DO REPEAT的嵌套使用逻辑错误:外层DO REPEAT遍历365个变量的过程中,内层LOOP又重复执行了365次日期判断,相当于每个v变量最终都会被第365天的判断结果覆盖,自然会出现所有变量全为1或者全缺失的问题 - 已经定义了
VECTOR v(365)但未正确使用,SPSS的向量本身可以通过下标直接对应v1到v365,不需要额外搭配DO REPEAT遍历变量
修正后可正常运行的代码
* 定义向量,建立v(下标)和v1-v365的直接映射关系. VECTOR v(365). * 仅使用单层循环遍历1-365天,单次循环处理对应日期的变量赋值. LOOP #cnt = 1 TO 365. COMPUTE #current_date = DATESUM(Index, #cnt, "DAYS"). IF (Start_Sick LE #current_date) AND (End_Sick GE #current_date) v(#cnt) = 1. * 若需要将非病假天赋值为0而非系统缺失,可取消下一行注释. * IF MISSING(v(#cnt)) v(#cnt) = 0. END LOOP. EXECUTE.
代码逻辑说明
- 代码中带
#前缀的变量为SPSS临时变量,执行结束后不会保留在数据集中,不会占用额外存储 - 单层循环每次仅处理对应日期的判断逻辑,直接给匹配下标的
v变量赋值,不存在重复覆盖的问题 - 运行后如果病假时间段覆盖对应日期,对应
v变量值为1,否则默认保留系统缺失,可根据需要调整为0值
内容的提问来源于stack exchange,提问作者Björn Ahlström
相关产品推荐
相关产品推荐

