Cumulative Product of Returns from Daily to Monthly Data

The Problem:

We want to find cumulative product of returns from daily to monthly frequency. That is we want geometric cumulative returns in the fashion;
Cumulative Product = (1+R1)*(1+R2)*(1+R3)*......(1+Rn) - 1

Solution:
First we shall prepare our data, so imagine you have returns data in daily format where variable date tracks the data datewise. To generate sequential monthly identifier, we shall use:

*Data Preperation
*--------------------

gen year=year(date)
gen month=month(date)

*one month serial number
*----------------------------
sum year
scalar min = r(min)
scalar max = r(max)
gen mon_ser = (year - min)*12 + month
sum mon_ser
sca minm = r(min)
replace mon_ser = mon_ser - minm + 1

*One month serial number generation completed

We are ready to generate monthly geometric cumulative returns from daily data. Suppose our returns are recorded in variabe rm, then;

gen Period = .
bys mon_ser: egen SCAR=sum( ln(rm+1))
replace SCAR = exp(SCAR) - 1

What if we want the cumulative returns for more than one month. For example, if we want cumulative returns for 36 months, the code would be

tsset Period
loc F "(1+SCAR)"
sum Period
forval i = 1 / 36 {
loc F "`F' * (1+L`i'.SCAR)"
gen rm`=`i'+1'=`F' - 1
}

**********************