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.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.