【SAS】ROC曲線を描く

PROC LOGISTICのオプションではなくて、予測値と実績値が揃っているデータセットに対し、ROC曲線を描く方法。

ここを参考にしました。
http://www2.sas.com/proceedings/sugi22/POSTERS/PAPER219.PDF

DATAIN = データセット
LOWLIM = データ分割範囲の下限
UPLIM = データ分割範囲の上限
PROB = 予測契約確率
TF = 実績値("0"か"1"の数値)
NINC = 分割数
デフォルトではデータ範囲を20分割してROC曲線を描きます。
PROC GPLOTで図を描いてますが、ROCのデータセットをエクセルにコピーして、エクセルで図を書いた方がそれっぽくなります。

%MACRO ROC(DATAIN, LOWLIM, UPLIM, PROB, TF, NINC = 20);
  OPTION MTRACE MPRINT;
  DATA ROC;
    SET &DATAIN;
    LOWLIM = &LOWLIM;
    UPLIM  = &UPLIM;
    NINC   = &NINC;
      DO I = 1 TO NINC + 1;
        CUTOFF = LOWLIM + (I - 1) * ((UPLIM - LOWLIM) / NINC);
        IF &PROB > CUTOFF THEN TEST = 1;
        ELSE TEST = 0;
        OUTPUT;
      END;
    DROP I;
  RUN;

  PROC SORT;
    BY CUTOFF;
  RUN;

  PROC FREQ;
    BY CUTOFF;
    TABLES TEST * &TF / OUT = PCTS1 OUTPCT NOPRINT;
  RUN;

  DATA TRUEPOS;
    SET PCTS1;
    IF &TF = 1 AND TEST = 1;
      TP_RATE = PCT_COL;
    DROP PCT_COL;
  RUN;

  DATA FALSEPOS;
    SET PCTS1;
    IF &TF = 0 AND TEST = 1;
      FP_RATE = PCT_COL;
    DROP PCT_COL;
  RUN;

  DATA ROC;
    MERGE TRUEPOS FALSEPOS;
    BY CUTOFF;
    IF TP_RATE = . THEN TP_RATE = 0.0;
    IF FP_RATE = . THEN FP_RATE = 0.0;
  RUN;

  PROC GPLOT DATA = ROC;
    PLOT TP_RATE * FP_RATE = CUTOFF;
  RUN;
%MEND;