gpt4 book ai didi

mysql - 使用 SAS 主键

转载 作者:行者123 更新时间:2023-11-29 21:52:09 25 4
gpt4 key购买 nike

我希望 SAS 程序能够根据速率最高的线路从数据集中查找主要服务,但当出现平局时,将第一行设为主要服务。请参阅下面的数据集。

ID   line rate  outcome
TTT 1 .95 Primary
TTT 2 .43
RRR 1 .75 Primary
RRR 2 .75
AAA 1 .23
AAA 2 .12
AAA 3 .65 Primary

我创建了两个具有相同数据的表,然后使用以下内容

使用的代码:

proc sql;
create table test as
select a.ID, a.line, a.rate
(case
when ((a.ID = b.ID) and (a.rate ge b.rate)) then "Primary"
else ' '
end) as outcome
from table1 a,table2 b
where a.ID = b.ID;
quit;

最佳答案

这可能不是最好的解决方案,但我建议分两步进行。

  1. 查找每个 ID 的最大值
  2. 指定主键。使用标志变量来指示 max_rate 是否是第一次出现。

这是未经测试的示例代码:

    *Calculate max rate per ID;
proc sql;
create table temp1 as
select a.*, max(rate) as max_rate
from table1
group by ID
order by ID, line;
quit;

*Assign primary key;
data want;
set temp1;

by ID;
retain flag 0;

if first.ID then flag=0;
if rate=max_rate and flag=0 then do;
flag=1;
key='Primary';
end;
run;

proc print data=want;
run;

另一个选项是带有排序的数据步骤,排序后可以得到最大值,最小行位于顶部,并使用 BY 处理将键设置为 Primary。

 proc sort data=have;
by ID descending rate line;
run;

data want;
set have;
by id;
if first.id then key='Primary';
run;

proc sort data=want;
by id line;
run;

proc print data=want;
run;

关于mysql - 使用 SAS 主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536733/

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