【SAS】グループで最大値を持つレコードの抽出

グループで最大値を持つレコードを取りだそう!

たとえば、次の様なテーブルがあったとして
f:id:tetchi-kun:20150109150945p:plain
同一IDで最大の金額を持つレコードを取り出した次の様なテーブルが作りたいとします。
f:id:tetchi-kun:20150109145815p:plain

並び替えて最初のレコードを取り出す

PROC SQLだけで書けそうで書けなかったので、昔やった並び替えて最後のレコードを取り出すという方式でやってみることにしました。

/** IDと金額順に並び替える(PROC SORTでも可) **/
PROC SQL;
  CREATE TABLE data2 AS
  SELECT
     ID
    ,取引方法
    ,金額
  FROM data1
  ORDER BY ID, 金額;
QUIT;

/** 最後のレコードだけ取り出す **/
DATA data3;
  SET data2;
  BY ID;
  IF LAST.ID THEN OUTPUT;
RUN;

SQLで書いてみる

ちょっと調べてみたら、SQLでも書けました。
サブクエリ使えば良かったんですね。

PROC SQL;
  CREATE TABLE data2 as
  SELECT
     ID
    ,取引方法
    ,金額
  FROM data1
  INNER JOIN (SELECT ID, max(金額) FROM data1 GROUP BY ID)
    AS data3 on data1.ID = data3.ID;
QUIT;