値の順番に応じて一定の割合でオブザベーションを取り出す方法

[OS]ALL
[リリース] 6.09e, 6.12, 8.1, 8.2
[キーワード] RANK, PERCENT

[質問]

あるデータセットから、値のもっとも小さいものから10%程度のオブザベーションを取り出したいのですが、どのような方法がありますか?。

[回答]

RANKプロシジャとPERCENTオプションを利用する方法をご紹介します。
RANKプロシジャは、データセットの変数の値に順番をつけるプロシジャですが、PERCENTオプションを使うことで、百分率での順番をつけることができます。
以下のプログラムでは、RANKプロシジャにより作成された順番を、抽出条件として利用しています。

  /* サンプルデータ */
  DATA sample;
    DO student = 1 TO 100;
      tensu  = INT(RANUNI(0)*100+1);
      OUTPUT;
    END;
  RUN;

  /* 値の小さいものから 10% を抽出 */
  PROC RANK DATA=sample OUT=outdata(WHERE=(rank<=10)) PERCENT ;
    VAR tensu;
    RANKS rank;
  RUN;