BookmarkSubscribeRSS Feed
TomiKong
Fluorite | Level 6

Hi All,

I want to generate one random walk sequence, but can't achieve it with the codes below. Anything wrong with the codes?  Any saser could help me out? Thanks in advance..

data want;

call streaminit(123);

do i=1 to 1000;

x=rand('normal', 0, 1);

if i=1 then y=x;

   else y=lag(y)+x;

output;

end;

run;

5 REPLIES 5
Ksharp
Super User

You are using LAG() with a conditon which usually is wrong.

You should split it into two different data step.

data x;
call streaminit(123);
do i=1 to 1000;
x=rand('normal', 0, 1);
output;
end;
run;

data want;
 set x;
y=lag(x)+x;
if i=1 then y=x;
run;



Ksharp

Haikuo
Onyx | Level 15

,

Your comment of using lag() conditionally is absolutely appropriate, and I think you are reading OP's mind correctly. However, just in case that OP wants to use lag() on the fly (y=lag(y)), and to avoid conditional lag() as well as 50% obs being missing,  we can try:

data want1;

call streaminit(123);

do i=1 to 1000;

x=rand('normal', 0, 1);

y=ifn(i<3,x,lag(y)+x);

/*if i=1 then y=x;*/

/* else y=lag(y)+x;*/

output;

end;

run;

Haikuo

ballardw
Super User

Or RETAIN may be appropriate:

 

data want;

call streaminit(123);

retain y .;

do i=1 to 1000;

x=rand('normal', 0, 1);

if i=1 then y=x;

else y=y+x;

output;

end;

run;

Haikuo
Onyx | Level 15

Yes, 'retain' is better, and it is  for sure worth introducing it to OP instead of trying squeezing lag() and making it more complex. Haikuo

LarryWorley
Fluorite | Level 6

I may be wrong here, but it seems to me that the easiest way to fix this is to remove the lag function since it is not needed.  Since the overall implicit data loop runs only once, won't the following code generate the desired random walk?

data want;
  call streaminit(123);
 
  do i=1 to 1000;

     x=rand('normal', 0, 1);
     if i=1 then y=x;
     else y=y+x;
     output;

  end;

run;

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 871 views
  • 0 likes
  • 5 in conversation