【SAS】キーが複数存在するテーブルで重複レコードを抽出する

重複レコードの数を数える

キーが複数あるようなテーブルで、重複しているレコードを取り出したいことがある。
そんなときは、まず重複するレコード数を数える。
たとえば、ID1とID2の2つを指定することでレコードが一意になるテーブルで、ID1とID2のセットで重複がいくつあるか数える場合は次のSQLが使える。

PROC SQL;
  CREATE TABLE DUPLICATION_COUNT AS
  SELECT
     ID1
    ,ID2
    ,count(*) as COUNT_of_ROW label = "重複行数カウント"
  FROM
    DATA_IN
  GROUP BY
    ID1, ID2
  HAVING
    count(*) > 1
  ;
QUIT;

このSQLを実行するとID1とID2のセットで重複しているものだけを抽出できる。
ついでに何行重複していたかをCOUNT_of_ROWに格納している。

重複レコードを取り出す

上記のDUPLICATION_COUNTテーブルができていれば、ID1とID2で元テーブル(DATA_IN)とinner joinしてあげれば、重複しているレコードを取り出すことができる。