gpt4 book ai didi

sql - SAS 如果一个变量 = x,则使所有其他变量也 = x

转载 作者:行者123 更新时间:2023-12-02 09:35:37 28 4
gpt4 key购买 nike

我的表中有几个变量,其中一个是 claim 编号,另一个是收入代码。每个唯一的 claim 编号有多个行,具有不同的收入代码。我想检查 claim 中是否存在特定收入代码,如果存在,请更改具有该 claim 编号的所有其他行的收入代码以显示相同的收入代码。

例如,我的表格是这样的:

索取 Rev_Code

123 0450

123 0762

123 0330

456 0234

我希望看到收入代码 0450 出现在 claim 123 上,因此更改 claim 123 的所有其他行以显示收入代码 0450。收入代码 0450 未出现在 claim 456 上,因此不会对具有以下内容的行进行任何更改该 claim 编号。这是一个小例子,但我正在使用的实际表包含 50 多列和 20,000,000 多行。是否可以通过这种方式系统地更改收入代码?谢谢

最佳答案

尽管 Grantly 的答案无疑对大多数 SQL 风格都有效,但 SAS 中所需的语法略有不同:

data claims;
input claim :3. rev_code :4.;
format rev_code z4.;
cards;
123 0450
123 0762
123 0330
456 0234
;
run;

proc sql undo_policy = optional;
update claims
Set rev_code = 0450
Where claim in
(select distinct claim from claims where rev_code = 0450)
;
quit;

默认情况下,undo_policy 设置为必需,因此 SAS 将拒绝处理此查询,因为它涉及覆盖用于确定所做更改的变量。我还使用了 in 而不是 exists - 根据 SAS 帮助文件,这通常更有效。

如果您创建一个或两个索引,也可以使用 modify 语句通过数据步骤更新大型表:

proc datasets lib = work nolist;
modify claims;
index create claim rev_code;
run;
quit;

proc sql;
create table claims_0450 as
select distinct claim
from claims
where rev_code = 0450;
quit;

data claims;
set claims_0450;
do until(eof);
modify claims key = claim end = eof;
if _IORC_ then _ERROR_ = 0;
else do;
rev_code = 0450;
replace;
end;
end;
run;

这实际上只需要声明中的索引,但索引 rev_code 也可以加快中间查询的速度。 set 语句将声明值从 Claims_0450 加载到 PDV 中,然后 do 循环使用声明上的索引来迭代具有该声明编号的所有记录,并根据需要设置 rev_code。然后,下一个 claim 值将从 Claims_0450 加载到 PDV 中,并重复该过程。

关于sql - SAS 如果一个变量 = x,则使所有其他变量也 = x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26558139/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com