SAS:将观测值与 BY 组中的其他观测值进行比较

SAS: Compare observations to other observations within BY-group

提问人:Will Doss 提问时间:11/15/2023 最后编辑:Will Doss 更新时间:11/21/2023 访问量:36

问:

编辑:将来为他人分享:https://support.sas.com/resources/papers/proceedings20/4778-2020.pdf

我正在尝试使用某些参数标记观测值,这些参数属于其他观测值的日期范围。我正在使用 SAS EG。数据处于事件级别,我想按患者 ID 对其进行分组(例如,同一患者在其任何索赔后 7 天内支付的索赔)。我希望选择一行,将其与 BY 组中的所有其他行进行比较,然后转到下一行。

这是一个大型数据集(260M obs),因此SQL自联接需要太长时间。我试图弄清楚是否有更好的方法可以在 DATA 步骤中做到这一点。我还探索了 DOW 函数(做 N =1 乘以 1,直到(最后。VARIABLE)) 但这似乎更适合在 BY 组级别聚合数据,而不是处理和比较单个行。下面是一个数据示例。此解决方案需要将 rx_id=42 标记为在被拒绝的索赔后 7 天内发生,但我不想仅限于连续的行。

rx_id patient_id event_date claim_type
32 6762202910 12/11/2020 支付
33 6762202910 12/29/2020 支付
34 6762202910 01/28/2021 支付
41 6762205899 02/13/2021 拒绝
42 6762202910 02/20/2021 支付
SAS公司

评论


答:

0赞 Tom 11/15/2023 #1

从你对需求的简要描述(最后一句话)来看,你似乎只需要记住上一次拒绝是什么时候。

data want;
   set have;
   by patient_id event_date;
   if first.patient_id then last_reject=.;
   retain last_reject;
   format last_reject yymmdd10.;
   if claim_type='Rejected' then last_reject=event_date;
   if claim_type='Paid' then flag = (event_date - 7) < last_reject ;
run;

但我怀疑您的真正问题更复杂,因为您可能对与付费索赔相关的拒绝感兴趣。

评论

0赞 Will Doss 11/15/2023
重新定义最后的拒绝实际上可能就足够了。我也想要它用于付费索赔,但我总是可以用rx_id创建一个人行横道。让我来玩一下这个。谢谢!
0赞 Will Doss 11/15/2023
这适用于被拒绝的索赔,关于如何修改付费索赔的任何想法?(在原始付款比较器之后的已付款索赔)
0赞 Tom 11/15/2023
如果数据是不同“比较器组”的混合体,则可能需要使用 HASH() 对象来存储该组的最新付款/拒绝声明。如果组 ID 是简单的小整数(或可以映射到这样的整数),则可以使用数组而不是 HASH()。
0赞 Will Doss 11/15/2023
我从未使用过哈希值,但我会看看。
0赞 Will Doss 11/15/2023
未来与他人分享:support.sas.com/resources/papers/proceedings20/4778-2020.pdf