在SAS中查找具有最大值的记录

时间:2014-02-22 16:40:24

标签: sas

如何在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

但它对我不起作用......我做错了什么?

由于

1 个答案:

答案 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;