我希望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;
答案 0 :(得分:0)
这可能不是最佳解决方案,但我建议采用两步法。
这是一个未经测试的示例代码:
*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;
另一个选项是使用sort,sort的数据步骤,因此您可以在顶部使用最小行,并使用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;