SAS DATA:如何删除仅发生一次的观察

时间:2012-11-04 03:36:16

标签: sas datastep

在SAS中,假设我有一个名为" person_groups"的数据集。它有两个变量,名为" person"和" group"。此数据集只是将每个人分配到一个组。

如何从此数据集中删除所有在其群组中没有其他人的人?换句话说,如何删除所有单例组?

[我对proc sql解决方案或data step解决方案感到满意 - 或者没问题。]

旁注:我是SAS的新手。我已经使用C ++和MATLAB多年了。我觉得我无法理解如何使用SAS DATA步骤进行任何。它看起来非常笨重,奇异而又不雅。坦率地说,我变得非常沮丧。那里的人有疲倦的希望吗? :)

2 个答案:

答案 0 :(得分:4)

这是一种使用数据步骤的方法。这种方法需要排序。

data person_groups;
 input person $ group $;
 datalines;
John Grp1
Mary Grp3
Joe Grp2
Jane Grp3
Frank Grp1
;

Proc Sort data=person_groups;
 by group;
run;

Data person_groups;
 set person_groups;
 by group;
 if first.group and last.group then delete;
run;

答案 1 :(得分:2)

以下是PROC SQL解决方案:

proc sql;
   delete from person_groups
   where group in (
      select group
      from person_groups
      group by 1
      having count(*) = 1
      );
quit;

如您所见,PROC SQL主要遵循标准的ANSI语法,因此您现有的SQL技能应该非常便携。并参与SAS Data Step编程;语言非常丰富,功能齐全,绝不“不优雅”。您可能已经看到了不优雅的代码,但这更可能是程序员的错误。花几分钟时间阅读SAS Concepts manual