Thanks for all the help. Finally settled on the following code: %macro lag_months(time,var,var_new); array back_&time._ (12) _temporary_ ; back_&time._(1)=lag1(&var.); back_&time._(2)=lag2(&var.); back_&time._(3)=lag3(&var.); back_&time._(4)=lag4(&var.); back_&time._(5)=lag5(&var.); back_&time._(6)=lag6(&var.); back_&time._(7)=lag7(&var.); back_&time._(8)=lag8(&var.); back_&time._(9)=lag9(&var.); back_&time._(10)=lag10(&var.); back_&time._(11)=lag11(&var.); back_&time._(12)=lag12(&var.); if 1 <= for_m1 <= 1 then do; &var_new._lag1 = back_&time._(for_m1); end; else &var_new._lag1 = 0; if 1 <= for_m2 <= 2 then do; &var_new._lag2 = back_&time._(for_m2); end; else &var_new._lag2 = 0; if 1 <= for_m3 <= 3 then do; &var_new._lag3 = back_&time._(for_m3); end; else &var_new._lag3 = 0; if 1 <= for_m12 <= 12 then do; &var_new._lag12 = back_&time._(for_m12); end; else &var_new._lag12 = 0; %mend;
... View more