在SAS中,假设我有一个名为" person_groups"的数据集。它有两个变量,名为" person"和" group"。此数据集只是将每个人分配到一个组。
如何从此数据集中删除所有在其群组中没有其他人的人?换句话说,如何删除所有单例组?
[我对proc sql
解决方案或data step
解决方案感到满意 - 或者没问题。]
旁注:我是SAS的新手。我已经使用C ++和MATLAB多年了。我觉得我无法理解如何使用SAS DATA步骤进行任何。它看起来非常笨重,奇异而又不雅。坦率地说,我变得非常沮丧。那里的人有疲倦的希望吗? :)
答案 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。