id x
1 2
2 3
3 5
4 8
5 9
6 8
hi, i have sample dataset like above. i want to create a new variable y, such that,
if id = 1, then y = x;
else y(t)= y(t-1) * 2.
in this case:
y(1) = x(1) = 2
y(2) = y(1) *2 = 2*2 = 4
y(3) =y(2) *2 = 4*2 = 8
y(4) =y(3) *2 = 8*2 = 16
y(5) = y(4) *2 = 16*2 = 32
y(6) = y(5) *2 = 32*2 = 64
i am wondering if there is any function to achieve it? looks like lag can't do it.
thanks a lot for your help!
Hi, you can try this method. You are right, LAG function can't do it.
data test;
input id x;
retain temp;
if id=1 then do;
y=x;
temp=y;
end;
if id ne 1 then do;
y=temp*2;
temp=y;
end;
drop temp;
cards;
1 2
2 3
3 5
4 8
5 9
6 8
;
run;
Hi, you can try this method. You are right, LAG function can't do it.
data test;
input id x;
retain temp;
if id=1 then do;
y=x;
temp=y;
end;
if id ne 1 then do;
y=temp*2;
temp=y;
end;
drop temp;
cards;
1 2
2 3
3 5
4 8
5 9
6 8
;
run;
Smart! thank you!
You can simplify the code a bit.
data test;
input id x;
retain y;
y=ifn(id=1,x,y*2);
cards;
1 2
2 3
3 5
4 8
5 9
6 8
;
run;
Thanks Keith, works better!
Year, this is easier.
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.
Ready to level-up your skills? Choose your own adventure.