2

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

我怎样才能从这个数据集中删除所有在他们的组中没有其他人的人?换句话说,我怎样才能删除所有单例组?

[我会很高兴有一个proc sql解决方案或一个data step解决方案——这都很好。]

旁注:我是 SAS 新手。多年来我一直在使用 C++ 和 MATLAB。我觉得我无法理解如何使用 SAS DATA 步骤做任何事情。它看起来非常笨重、怪异和不雅。坦率地说,我越来越沮丧。外面的人对疲倦的人有希望吗?:)

4

2 回答 2

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;
于 2012-11-04T04:39:35.510 回答
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 概念手册

于 2012-11-04T14:57:43.100 回答