任意変数が欠損値のとき、
  前のオブザベーションの欠損値ではない値のセット方法

[OS] ALL
[リリース] ALL
[キーワード] DATA, MISSING, RETAIN

[質問]

任意の変数が欠損値のとき、欠損値の代わりに前のオブザベーションの値(非欠損値)をセットする方法はありますか。

  NO   VALUE
1001     100
.         50
1002      50
.        100
.        150
1003      50
.        200
1004      50
  NO   VALUE
1001     100
1001      50
1002      50
1002     100
1002     150
1003      50
1003     200
1004      50

[回答]

RETAINステートメントを使用します。次のプログラム例を参考にしてください。例では、任意の変数が欠損値ではないとき、その値を別の変数に保存します。欠損値が現れた場合は、保存しておいた値を欠損値の代わりにセットします。

例)

                        /* サンプルデータセット */
DATA sample;
  INPUT no value;
CARDS;
1001 100
.     50
1002  50
.    100
.    150
1003  50
.    200
1004  50
;
RUN;

DATA sample(drop=sv_no);
  RETAIN sv_no;                     /* 値を保持 */
  SET sample;
  IF no = . THEN                /* 欠損値のとき */
     no = sv_no;
  ELSE
     sv_no = no;
RUN;
                                    /* 値の確認 */
PROC PRINT DATA=sample;
RUN;