2021年5月15日土曜日

LAG関数の動き



LAG関数は「nオブザベーション前の値を取得したい」という場合に役立ちます。

ただし、よくある落とし穴もあるので、最後まで(リンクページも含めて)読んで仕組みを理解したほうが安全です。


簡単な例で見ていきましょう。

*** サンプルデータ作成 ;
data DT1;
input A;
cards;
20
30
10
40
;

data OUT1;
   set DT1;
   B = lag(A);
   C = lag2(A);
   D = lag3(A);
run;

 A 
B
C
D
  20  
  .   
  .   
  .   
  30
  20
  .   
  .   
  10
  30
  20
  .
  40
  10  
  30  
  20  



何が起こっているのか、イメージで説明したいと思います。

(自分なりの解釈になっている可能性があるかもしれませんので、あしからず・・)


今回のサンプルプログラムの「C = LAG2( A )」の時の処理のイメージです。LAG関数によって内部では「キュー」と呼ばれる仕組みを利用しています。


  • 上の例は、ラーメン屋にできた行列みたい。
    • ラーメン屋の行列=「キュー」
    • 行列に並ぶ人=「変数A」
    • ラーメン食べれた人=「変数C」
    • 最初のn杯は店員の味見用に作ったラーメンでお客さんには出さないやつ。
    • 最後に並んだ何名かはスープ切れで食べれなかった、、みたいな

  • 「LAG1」の場合だけ「LAG」と書いてもOK