删除所有观察结果,在某些变量

时间:2017-02-17 12:15:53

标签: sas

假设我有表:

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

我相信有更多美丽的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以将proc sortnouniquekey选项一起使用。然后使用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}}

我在上面的代码中留下了两个版本,使用你认为更具可读性的版本。