每个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;
谢谢!
答案 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;
应该比两种更快。