La función LAG de SAS

La función LAG de SAS nos devuelve el valor de la observación n-n 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,… En 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;

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 en n en función de la memoria. En la ayuda de SAS nos indica que necesitamos 100 bytes por el n deseado, de esta forma LAG10 requiere 1000 bytes de memoria. En 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.