I am trying to create lead/lag variables from a data set. My goal is to take all variables and create a certain number of lead/lag variables to be added to the data set. I have a macro that creates the lead/lags for one variable. I am having difficulty looping the variables in my data set through the macro. * Here is some sample data;
data mydata;
input time var1 var2 var3;
datalines;
1 1.2 54 100
2 1.8 50 90
3 1.5 56 95
4 2.1 67 92
5 2.5 75 110
6 1.9 77 104
7 2.3 84 108
8 2.1 81 112
;
options validvarname=v7;
run;
*Here is part of the macro I created;
%macro laglead(mydata=, var=);
/*set mydata;*/
set &mydata(firstobs=2 keep=&var rename=(&var=Lead1_&var) )
&mydata( obs=1 drop=_all_);
%let name = Lag1_&var;
&name = ifn(first.&var, (.), lag(&var));
%let name = fut_chg1_&var;
&name = lead1_&var-&var;
%let name = past_chg1&var;
&name = &var-lag1(&var);
%mend laglead;
*Loop variables through macro;
data createlead;
set mydata;
array d var1--var3;
do over d;
%laglead(mydata=mydata,var=d);
end;
run; This returns 2 errors: ERROR: Variable d is not on file WORK.MYDATA. ERROR: Invalid DROP, KEEP, or RENAME option on file WORK.MYDATA. Any thoughts or suggestions would be appreciated. I am using EG 7.13 and yes I have ETS. I couldn't get proc expand to work.
... View more