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(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.