首先我知道我的问题类似于This(这与我发现的问题最接近),但同时存在一些差异,因此我的新帖子。
我有一个带有标识符和声明的数据库。声明构造为标识符+字母。 如果标识符是123456,则声明将为“123456A”,“123456B”等等
我想为每个标识符选择一个观察结果,声明是最后一个字母的声明,当然,并不总是相同。
我假设我可以使用proc类,然后使用nodupkey执行另一个:
proc sort data=have out=have2;
by identifier declaration /descending;
run;
proc sort data=have2 out=want nodupkey;
by declaration;
run;
但由于我有一个相对重要的数据库(数以千万计的观测数据),我想知道最好的方法,如果它是另一个更好的方法。 通常,如果可以一步完成。
由于
答案 0 :(得分:0)
这看起来像是一个快速解决方案。它只设置第一个观察点(在您的情况下是最后一个,因为您已经按降序排序)。这意味着其余的记录甚至不会被加载到程序数据向量中。如果可能的话请告诉我它是怎么回事。我很好奇这是否是最佳的。我知道这只是在理论上才是真的。我从未在大型数据集上自行测试过。 10x
data want;
do until ( first.identifier ) ;
set have;
by identifier ;
end ;
run;
答案 1 :(得分:0)
这应该有效:
proc sql;
create table want as
select
identifier,
max(declaration) as last_declaration
from have
group by identifier;
quit;