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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.