假设我有表:
Name Age
Bob 4
Pop 5
Yoy 6
Bob 5
我希望删除表中不唯一的所有名称:
Name Age
Pop 5
Yoy 6
ATM,我的解决方案,以创建一个包含唯一名称计数的新表:
Name Count
Bob 2
Pop 1
Yoy 1
然后,留下所有人,Count > 1
我相信有更多美丽的解决方案。
答案 0 :(得分:1)
您可以将proc sort
与nouniquekey
选项一起使用。然后使用uniqueout=
输出唯一值,并使用out=
输出重复项(如果您不想覆盖原始数据集,则需要out=
语句。)
proc sort data = have nouniquekey uniqueout = unique out = dups;
by name;
run;
答案 1 :(得分:1)
如果我理解正确,有两种方法可以做到:
SQL过程
在SAS中你可能不需要像我这里那样使用MIN()这样的汇总函数,但是当name
只有min(age) = age
时只有proc sql;
create table want as
select name, min(age) as age
from have
group by name
having count(*) = 1;
quit;
,并且将其迁移到另一个时可能需要RDBMS(例如Oracle,SQL Server):
proc sort data=have out=have_stg;
by name;
run;
数据步骤
要求对数据进行预先排序:
if first.name = 1 and last.name = 1
在进行SAS数据分组处理时,第一个。 (第一点)和最后一个。生成(last-dot)变量,表示当前观察是否是副组中的第一个和/或最后一个。使用SAS条件逻辑可以简单地测试data want;
set have_stg;
by name;
if first.name and last.name;
/* Equivalent to:*/
*if first.name = 1 and last.name = 1;
run;
。使用逻辑速记减少这一点变为:
{{1}}
我在上面的代码中留下了两个版本,使用你认为更具可读性的版本。