Stataでラグを取る――Lを使う,[_n-1]は使わない

Stataのページにも[_n-1]を使えばよいと書いてあるが,パネルの場合,[_n-1]を使うと大変なことになるので注意.

use http://www.stata-press.com/data/r14/nlswork
. list idcode year ttl_exp in 1/12, clean

       idcode   year    ttl_exp  
  1.        1     70   1.083333  
  2.        1     71   1.275641  
  3.        1     72    2.25641  
  4.        1     73   2.314102  
  5.        1     75   2.775641  
  6.        1     77   3.775641  
  7.        1     78   3.852564  
  8.        1     80   5.294872  
  9.        1     83   5.294872  
 10.        1     85   7.160256  
 11.        1     87    8.98718  
 12.        1     88   10.33333  
. gene lttl_exp=L.ttl_exp
(17,643 missing values generated)


. list idcode year ttl_exp lttl_exp in 1/12, clean

       idcode   year    ttl_exp   lttl_exp  
  1.        1     70   1.083333          .  
  2.        1     71   1.275641   1.083333  
  3.        1     72    2.25641   1.275641  
  4.        1     73   2.314102    2.25641  
  5.        1     75   2.775641          .  
  6.        1     77   3.775641          .  
  7.        1     78   3.852564   3.775641  
  8.        1     80   5.294872          .  
  9.        1     83   5.294872          .  
 10.        1     85   7.160256          .  
 11.        1     87    8.98718          .  
 12.        1     88   10.33333    8.98718  

. gen lag_exp = ttl_exp[_n-1] if idcode==idcode[_n-1]
(4,711 missing values generated)

. list idcode year ttl_exp lttl_exp lag_exp in 1/12,clean

       idcode   year    ttl_exp   lttl_exp    lag_exp  
  1.        1     70   1.083333          .          .  
  2.        1     71   1.275641   1.083333   1.083333  
  3.        1     72    2.25641   1.275641   1.275641  
  4.        1     73   2.314102    2.25641    2.25641  
  5.        1     75   2.775641          .   2.314102  
  6.        1     77   3.775641          .   2.775641  
  7.        1     78   3.852564   3.775641   3.775641  
  8.        1     80   5.294872          .   3.852564  
  9.        1     83   5.294872          .   5.294872  
 10.        1     85   7.160256          .   5.294872  
 11.        1     87    8.98718          .   7.160256  
 12.        1     88   10.33333    8.98718    8.98718  

Lのprefixを用いた場合は,yearを参照し,一期前のラグがとられている.そのため存在しない時期については欠損になっている.
[_n-1]を用いた場合,単純に一行上の値を参照しているので,一期前のラグもあれば(たとえば二行目),5行目のように二期前のラグもある.
これでは分析者が思い描いたようなラグは取れていない.