4

変数に条件を設定しようとしています。

変数 NUMBER が と等しい場合。次に、Number の前の値と等しくします。

data table2;
  set table1;

  prv_value = lag(number);
  if number = . then number = prv_value;
run;

ただし、数値 = の行に 2 つの値がある場合。次に、 の値の 2 回目の発生。number = の以前の値があります。.

私が望むのは、 number が と等しくない最初の前のオカレンスを見つけることです。number の値をその前の非欠損値と等しくします。

私のデータの例は次のとおりです。

id  number
d10   2       
d10   2       
d10   3       
d10   .       
d10   .       

上記のコードを適用すると、次のようになります。

id  number prv_number
d10   2       .
d10   2       2
d10   3       2
d10   3       3
d10   .       .

私が欲しいのは:

id  number prv_number
d10   2       .
d10   2       2
d10   3       2
d10   3       3
d10   3       .

つまり、number の値が の場合。次に、欠損していない値の前の最初の発生と等しくします。

私のデータセットには、次のようなものがある場合があります。

id  number
d10   4
d10   2
d10   .
d10   .
d10   .
d10   .

そして私が欲しいのは:

id  number
d10   4
d10   2
d10   2
d10   2
d10   2
d10   2

(注意してください、私のデータはイベント/時間の順にソートされているため、最初の前の発生が必要です)。

以前の発生回数が異なる場合にラグ関数でできることはありますか、それとも私がやりたいことができることはありますか?

4

1 に答える 1

6

次のように保持ステートメントを使用してみてください (未テスト)。

data table2;
  set table1;

  retain prv_value .;

  if number=. then
    number=prv_value;

  if number ne . then
    prv_value=number;
run;
于 2013-04-22T11:30:54.420 に答える