2

SAS に、"person_groups" という名前のデータセットがあるとします。「person」と「group」という名前の 2 つの変数があります。このデータセットは、各人をグループに割り当てるだけです。

グループに誰もいないすべての人をこのデータセットから削除するにはどうすればよいですか? つまり、すべてのシングルトン グループを削除するにはどうすればよいでしょうか?

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

Here is a PROC SQL solution:

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

As you can see, PROC SQL mostly follows standard ANSI syntax, so your existing SQL skills should be quite portable. And hang in there with respect to SAS Data Step programming; the language is extremely rich, full featured, and by no means "inelegant". You may have seen inelegant code, but that's more likely the fault of the programmer. Take a few minutes and read the SAS Concepts manual.

于 2012-11-04T14:57:43.100 に答える