在SAS中基于医保理赔数据统计索引日后各月连续参保患者数
基于医保理赔数据统计索引日后1-12个月连续参保的独特患者数(SAS实现)
需求概述
使用SAS处理医保理赔数据,分别统计索引日期(indexdt)后第1个月、第2个月……直至第12个月内,具备连续参保状态的独特患者数量。
数据结构说明
startdt:医保参保起始日期enddt:医保参保结束日期continuous_enroll:连续参保标识规则:- 同ID的参保记录中,若当前记录的起始日期与上一条记录的结束日期无间隔(即
startdt = lag(enddt) + 1),则标记为1 - 存在间隔则标记为
0 - 每个ID的第一条参保记录该字段为缺失值
- 同ID的参保记录中,若当前记录的起始日期与上一条记录的结束日期无间隔(即
输入数据示例
data input; input ID $1. startdt:mmddyy10. enddt:mmddyy10. indexdt :mmddyy10. continuous_enroll; format startdt date9. enddt date9. indexdt date9. ; datalines; 1 1/1/2020 1/31/2020 3/12/2020 . 1 2/1/2020 2/28/2020 3/12/2020 1 1 3/1/2020 3/31/2020 3/12/2020 1 1 5/1/2020 5/31/2020 3/12/2020 0 2 8/1/2019 8/31/2019 3/16/2020 . 2 3/1/2020 3/31/2020 3/16/2020 0 3 4/1/2020 4/30/2020 4/13/2020 . 3 5/1/2020 5/31/2020 4/13/2020 1 3 8/1/2020 8/31/2020 4/13/2020 0 3 9/1/2020 9/30/2020 4/13/2020 1 ; run;
注:修正了原数据中9/31/2020的日期错误,改为9/30/2020
解决方案SAS代码
步骤1:生成索引日后1-12个月的月份区间表
创建包含每个月起始和结束日期的辅助表,用于后续匹配:
data months_after_index; set input; by ID; if first.ID then do; do month_num = 1 to 12; /* 计算索引日后第month_num个月的起始/结束日期(indexdt所在月为第0个月) */ month_start = intnx('month', indexdt, month_num, 'b'); month_end = intnx('month', indexdt, month_num, 'e'); output; end; end; keep ID indexdt month_num month_start month_end; format month_start month_end date9.; run;
步骤2:匹配参保记录与月份区间,判断连续参保状态
关联参保记录与月份区间,筛选覆盖目标月份的参保记录,并标记符合连续参保条件的记录:
data enroll_month_match; merge input(in=a) months_after_index(in=b); by ID; if a and b then do; /* 判断当前参保记录是否覆盖目标月份的任意日期 */ if startdt <= month_end and enddt >= month_start then do; /* 连续参保判定:当前记录为连续参保,或为ID第一条记录且覆盖目标月份 */ if continuous_enroll = 1 or continuous_enroll = . then do; eligible = 1; output; end; end; end; keep ID month_num eligible; run;
步骤3:去重并统计每个月的独特患者数
对每个ID的每个月份去重,再统计各月的独特患者数量:
proc sort data=enroll_month_match nodupkey; by ID month_num; run; proc freq data=enroll_month_match; tables month_num / nocum nocol; weight eligible; title "索引日后1-12个月连续参保独特患者数统计"; run;
结果说明
以示例数据为例,核心统计结果如下:
- 第1个月(2020年4月):1人(ID3,4月参保为第一条记录)
- 第2个月(2020年5月):1人(ID3,5月参保为连续状态)
- 后续月份的统计值可通过代码运行得到准确结果
内容的提问来源于stack exchange,提问作者user21583043
相关产品推荐
相关产品推荐

