SAS按ID保留最大值

时间:2014-08-29 16:38:28

标签: sas

每个ID都有多个实例,每个实例都有不同的值。我希望最终输出是每个ID的最大值。所以初始数据集是:

 ID     Value
 1      100
 1      7
 1      65
 2      12
 2      97
 3      82
 3      54

输出将是:

 ID     Value
 1      100
 2      97
 3      82

我尝试了两次运行proc sort,认为第一种排序会以正确的顺序排列,这样第二种类型的nodupkey就会摆脱正确的值。这没用。

 proc sort work.data; by id value descending; run;
 proc sort work.data nodupkey; by id; run;    

谢谢!

2 个答案:

答案 0 :(得分:2)

您的方法应该运行正常,但看起来您有语法错误 - 您是否忘记查看日志?降序关键字需要在要按降序排序的变量之前。

proc sort data=sashelp.class out=tmp;
  by sex descending height;
run;

proc sort data=tmp out=final nodupkey;
  by sex;
run;

另外 - 如果您不熟悉SQL,我强烈建议您应该学习它,因为它将简化许多数据操作任务。这也可以在单个SQL步骤中解决:

proc sql noprint;
  create table want as
  select sex,
         max(height) as height
  from sashelp.class
  group by sex
  ;
quit;

答案 1 :(得分:2)

我的首选解决方案:

proc means data=have noprint;
  class id;
  var value;
  output out=want max(value)=;
run;

应该比两种更快。