提问人:Will Doss 提问时间:11/15/2023 最后编辑:Will Doss 更新时间:11/21/2023 访问量:36
SAS:将观测值与 BY 组中的其他观测值进行比较
SAS: Compare observations to other observations within BY-group
问:
编辑:将来为他人分享: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 | 支付 |
答:
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
上一个:SAS 未正确更新
评论