hi i have data with 4 variables:
year, month,company, return
i want to compound the monthly return to annual. so that for each year:
(1+january return)*(1+feb return).....*(1+dec return)
does anyone know a smart way to do this?
many thanks!
data and output ?
Try
proc sql;
create table compound as
select
company,
year,
exp(sum(log(1+return))) - 1 as compoundedReturn
from myData
group by company, year;
quit;
Hi,
I just made a small assumption on how your data would look like given your request! First I used a transpose (1 line per company per year, with an entry for each month). Then I used a data step icw array-function to determine the yearly return:
data input (drop = i); format company $13.; do i = 1 to 12; year = 2016; month = i; company = 'A'; return = i/100; output; company = 'B'; return = (i+1)/100; output; end; run; proc sort data=input out=sortedInput; by year company month; run; proc transpose date=sortedInput out=tInput prefix=M; by company year; id month; run; data output (drop=i); set tInput; array allMonths(12) M1-M12; yearReturn = 1; do i = 1 to dim(allMonths); yearReturn = yearReturn*(1+allMonths[i]); end; yearReturn = yearReturn -1; run;
Hope this helps.
John
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.