Hua Pan <[email protected]>:
Here are two methods in one example (results may differ if you have
breaks in time series or missing data):
webuse grunfeld, clear
g ret=invest/1500
bys company (year): g cumul=1+ret if _n==1
replace cumul=(1+ret)*l.cumul if mi(cumul)
replace cumul=cumul-1
bys company (year): g c=sum(ln(ret+1))
replace c=exp(c)-1
li year ret cumul c if company==1, noo clean
On Thu, Mar 12, 2009 at 12:27 PM, Hua Pan <[email protected]> wrote:
> Dear Statalisters�¼
>
> I want to loop over firms and days, in order to calculate cumulative daily return for each firm and from day 1 to day 30. That means,
>
> firm day ret Cret
> 1 1 x1 x1
> 1 2 x2 (1+x1)*(1+x2)-1
> … … … …
> 1 30 x30 (1+x1)*(1+x2)*…(1+x30)-1
> 2 1
> … …
> 2 30
> ..
> firm and day have numeric format.
>
> I tried:
>
> sort firm day
> generate Cret = 0
> levelsof firm, local(firms)
> levelsof day, local(days)
> foreach f of local firms {
> foreach d of local days {
> gen Cret(`f’, `d’) = (1+Cret)*(1+ret)-1 if firm == `f' & day == `d'
> replace Cret = Cret(`f’, `d’) if firm == `f' & day >= `d'
> drop Cret(`f’, `d’)
> }
> }
>
>
> But it doesn’t seem to work. Have anyone idea about cumulative return or just cumulative sum for each firm and everyday, or just looping of this kind?
>
> Any help and suggestion would be greatly appreciated. Thank you very much in advance for your time.
>
> Best regards
>
> Hua
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/