SAS统计用药时长:间隔超90天停当前ID并继续下一个ID的实现
筛选符合随访间隔要求的患者记录解决方案
要实现“当两次随访间隔>90天时,停止保留当前ID的后续记录,但继续处理下一个ID”的需求,可通过在SAS数据步中添加保留标记变量来实现,修改后的代码如下:
data want; set have1; by id; retain keep_flag 1; if first.id then do; keep_flag = 1; output; end; else do; if dif <= 90 and keep_flag = 1 then output; else if dif > 90 then keep_flag = 0; end; run;
代码逻辑说明
retain keep_flag 1:声明标记变量并保留其值,避免每次处理新观测时重置,确保标记能跨同ID的观测传递- 首次观测处理:每个ID的第一条记录(
first.id)强制保留,同时重置标记为1,保证新ID从头开始判断 - 后续观测处理:
- 若当前间隔
dif≤90且标记为1,保留该记录 - 若间隔
dif>90,将标记设为0,后续同ID的所有记录都不再保留
- 若当前间隔
- 不同ID之间互不影响,处理完一个ID后自动切换到下一个ID重新开始判断
预期输出结果
对应示例数据,最终保留的记录为:
- ID101:前3条(第4条间隔超90,停止保留)
- ID102:全部4条(所有间隔均≤90)
- ID103:全部3条(所有间隔均≤90)
- ID104:第1条(第2条间隔超90,停止保留)
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

