La función LAG de SAS nos devuelve el valor de la observación $n - i$ de la variable indicada. Me explico con un ejemplo:

data lagn;
  do i = 1 to 10;
    lag_1 = lag(i);
    lag_2 = lag2(i);
    lag_3 = lag3(i);
    lag_4 = lag4(i);
    lag_5 = lag5(i);
    lag_6 = lag6(i);
    output;
  end;
run;

Esto produce:

lag.PNG

LAG(i) nos da el valor de i para la observación anterior, LAG2(i) nos da el valor de las 2 observaciones anteriores… In el caso de encontrarnos en las primeras observaciones, el valor que devuelve es el missing. Con ella podemos evitar trabajar con RETAIN a la hora de hacer sumas acumuladas:

data lagn;
  set lagn;
  sum_acum = sum(i, lag(i));
run;

Calcular diferencias entre observaciones:

data lagn;
  set lagn;
  if _n_ = 1 then dif = 0;
  else dif = i - lag(i);
run;

Y, por supuesto, medias móviles:

data lagn;
  set lagn;
  total_3 = sum(i, lag(i), lag2(i));
  if _n_ < 3 then divisor = _n_;
  else divisor = 3;
  media_3 = total_3 / divisor;
run;

Hay formas más elegantes de obtener medias móviles; además, podemos parametrizar este proceso. La función LAGn está limitada in $n$ in función de la memoria. In la ayuda de SAS se indica que necesitamos 100 bytes por el $n$ deseado; de esta forma, LAG10 requiere 1000 bytes de memoria. In mi caso, nunca me he visto obligado a necesitar más de LAG12. Espero que este breve repaso os ayude a conocer mejor esta función. Saludos.