如何在SAS中找到最大值的记录?我有一个以下结构的数据集:
age name
12 joe
15 jane
3 bob
14 rick
我想找到'name'的值,'age'是最大的(在这个例子中是'jane')。
我试过了:
data max;
set ages_data;
if age > max_age then do;
max_age = age;
max_name = name;
end;
retain max_:;
keep max_:;
run;
基于我在这里找到的内容: https://communities.sas.com/message/170554
但它对我不起作用......我做错了什么?
由于
答案 0 :(得分:3)
您的代码很好 - 但是输出所有记录,我假设您只需要一个记录?请尝试以下更改:
data max;
set ages_data end=lastobs; /* identify last record */
if age > max_age then do;
max_age = age;
max_name = name;
end;
retain max_:;
keep max_:;
if lastobs then output; /* only output last record */
run;
这种方法的一个缺点是,对于给定的最大年龄,它只会输出名称的FIRST值。该年龄可能有多个名称值。以下方法可能更适合您的目的:
proc sql;
create table max as
select name, age
from ages_data
where age= (select max(age) from ages_data);
如果它有用 - 以下是测试的数据:
data ages_data;
infile cards;
input age name $;
cards;
12 joe
15 jane
3 bob
14 rick
;run;