I would like to calculate returns using PROC EXPAND. I could use just a simple DATA step but I would like to learn more about PROC EXPAND.
My dataset has 3 columns containing stock, date, and price. I could use the following DATA step:
data stocks;
set stocks;
by stock date ;
return=price/lag(price)-1;
if first.stock then return=.;
run;
But How do I do this using PROC EXPAND? in particular, what do I put in the TRANSFORMIN and TRANSFORMOUT ?
Thanks
proc sort data=stocks;
by stock date;
run;
proc expand data=stocks out=result(drop=time);
by stock;
convert price=return / transformout=( ratio 1 -1);
run;
proc sort data=stocks;
by stock date;
run;
proc expand data=stocks out=result(drop=time);
by stock;
convert price=return / transformout=( ratio 1 -1);
run;
Thanks. just to confirm if I understand the code correctly,
transformout=( ratio 1 -1)
means getting the ratio of the current value over lag 1 and then minus 1 to get the return right? So, say if I want to get returns between now and 4 periods ago, it should be:
transformout=( ratio 4 -1)
Am I correct?
well done
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.