Hi Everyone,
I want to analyze the lag value of a variable.
Sure I can create lag1, lag2... lag100 variable and do the "array var(*) lag1-lag100;"
However, I wonder if there is any shorter way for the code such as
array var(*) lag1(x)-lag10(x);
Thank you for your help.
HHC
data have(drop=i);
do i=1 to 10000;
x=ranuni(-1);
output;
end;
run;
data want; set have;
array var(*) lag1(x)-lag10(x);
do i=1 to dim(lag);
if lag(i)>0 then t=1;
end;
run;
A macro may simplify the code;
%macro MakeLag;
%do i = 1 %to 100;
Lag&i = Lag&i(x);
%end;
%mend;
Data want;
set have;
%MakeLag;
array var lag1-lag100;
<other code>
run;
BTW your example code
do i=1 to dim(lag);
if lag(i)>0 then t=1;
end;
is incorrect syntax;
do i = 1 to dim(var); /* use the array name which you called var*/
if var >0 then t=1; /* use the array with the index*/
end;
Which will only generate one value of t, depending on the value of the last lagged value as written.
Do you have a license for SAS/ETS (Econometrics and Time Series)?
I'm not sure but I should have it with my SAS
I just check, mine is not SAS/ETS.
A macro may simplify the code;
%macro MakeLag;
%do i = 1 %to 100;
Lag&i = Lag&i(x);
%end;
%mend;
Data want;
set have;
%MakeLag;
array var lag1-lag100;
<other code>
run;
BTW your example code
do i=1 to dim(lag);
if lag(i)>0 then t=1;
end;
is incorrect syntax;
do i = 1 to dim(var); /* use the array name which you called var*/
if var >0 then t=1; /* use the array with the index*/
end;
Which will only generate one value of t, depending on the value of the last lagged value as written.
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.