我正在尝试使用属于其他观测值的日期范围内的某些参数来标记观测值。我正在使用 SAS EG。数据处于事件级别,我想按患者 ID 对其进行分组(例如,同一患者在任何索赔后 7 天内支付索赔)。我希望取一行,将其与 BY 组中的所有其他行进行比较,然后继续到下一行。
这是一个很大的数据集(260M obs),因此 SQL 自连接花费的时间太长。我试图找出是否有更好的方法在数据步骤中执行此操作。我还探索了 DOW 函数(执行 N =1 by 1 直到 (last.VARIABLE)),但这似乎更适合在 BY 组级别聚合数据,而不是处理和比较各个行。以下是数据示例。此解决方案需要将 rx_id=42 标记为在拒绝索赔后 7 天内发生,但我不想仅限于连续行。
rx_id | 患者_id | 活动日期 | 索赔类型 |
---|---|---|---|
32 | 6762202910 | 2020年12月11日 | 付费 |
33 | 6762202910 | 2020年12月29日 | 付费 |
34 | 6762202910 | 2021/01/28 | 付费 |
41 | 6762205899 | 2021/02/13 | 被拒绝 |
42 | 6762202910 | 2021/02/20 | 付费 |
从您对要求的简短描述(最后一句话)来看,您似乎只需要记住最后一次拒绝是什么时候。
data want;
set have;
by patient_id event_date;
if first.patient_id then last_reject=.;
if claim_type='Rejected' then last_reject=event_date;
if claim_type='Paid' then flag = (event_date - 7) < last_reject ;
run;
但我怀疑您真正的问题更复杂,因为您可能对与已付款索赔相关的拒绝感兴趣。