Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: RE: RE: Calculate variances of subsamples

From   "Martin Weiss" <>
To   <>
Subject   st: RE: RE: Calculate variances of subsamples
Date   Wed, 2 Jun 2010 20:54:39 +0200


So here is an example that avoids -postfile- for Lars` case:

//create resultsfile
cap erase myfile.dta
di in red _rc

gen start=.
gen end=.
gen _stat_1=.
gen stock=.
gen str15 kindofreturn=""

save myfile, replace

//get "3105.dta"
//8 stocks
set obs 8
gen byte stock=_n

//5 time periods
expand 5
bys stock: gen byte time=_n

gen double exret=rnormal()
gen double msciret=rnormal()
gen double msftret=rnormal()
gen double appret=rnormal()
gen double geret=rnormal()
gen double pgret=rnormal()
gen double jnjret=rnormal()
gen double bpret=rnormal()

save 3105, replace

//-use- "3105"
u 3105, clear

//Return calculation
gen double grexret=ex[_n]/ex[_n-1]-1 if _n>1
gen double grmsciret=msci[_n]/msci[_n-1]-1 if _n>1
gen double grmsftret=msft[_n]/msft[_n-1]-1 if _n>1
gen double grappret=app[_n]/app[_n-1]-1 if _n>1
gen double grgeret=ge[_n]/ge[_n-1]-1 if _n>1
gen double grpgret=pg[_n]/pg[_n-1]-1 if _n>1
gen double grjnjret=jnj[_n]/jnj[_n-1]-1 if _n>1
gen double grbpret=bp[_n]/bp[_n-1]-1 if _n>1

//loop to get -rolling- results for each stock
//and each return

foreach ret in exret msciret msftret{
//start inner loop
su stock, mean	
qui forv i=1/`r(max)'{
	keep if stock==`i'
	tsset time
	rolling r(Var), window(2) clear: su `ret'
	gen stock=`i'
	gen kindofreturn="`ret'"
	append using myfile
	save myfile, replace
//end inner loop


u myfile, clear
ren _stat_1 Variance
sort stock kindofreturn start
l, sepby(stock kindofreturn) noo


-----Original Message-----
[] On Behalf Of Martin Weiss
Sent: Mittwoch, 2. Juni 2010 20:27
Subject: st: RE: Calculate variances of subsamples


You could of course issue the -rolling- call with -clear- present, -save-
the result to a new file and reload your "3105.dta" to start anew for the
next stock. The datasets thus -saved- could be -append-ed to form one big
dataset afterwards. -postfile- is also an option, as always.

BTW, you may be better of with the lag operator "L." for your return


-----Original Message-----
[] On Behalf Of Lars Knuth
Sent: Mittwoch, 2. Juni 2010 20:22
To: statalist
Subject: st: Calculate variances of subsamples

Dear listers,

I have to say thanks to Martin, the recommendation of rolling was
great. Unfortunately, I have now a few problems with the
1. -rolling- works with the "clear" option, but without it does not
("rolling r(Var), window(60) clear: summarize exret" works)
2. I need the data to calculate and store the variances for more than
1000 stock price returns in the end, so can I somehow keep all the
data and then perform -rolling- in a loop?
3. Is there also an opportunity to perform the return calculation in a loop?

I am attaching parts of the code I have so far. Any ideas would be of
great help to me.
Thanks in advance!

use "C:\...\3105.dta", clear

gen int time=_n
* Return calculation
gen double exret=ex[_n]/ex[_n-1]-1 if _n>1
gen double msciret=msci[_n]/msci[_n-1]-1 if _n>1
gen double msftret=msft[_n]/msft[_n-1]-1 if _n>1
gen double appret=app[_n]/app[_n-1]-1 if _n>1
gen double geret=ge[_n]/ge[_n-1]-1 if _n>1
gen double pgret=pg[_n]/pg[_n-1]-1 if _n>1
gen double jnjret=jnj[_n]/jnj[_n-1]-1 if _n>1
gen double bpret=bp[_n]/bp[_n-1]-1 if _n>1

tsset time

* Rolling
rolling r(Var), window(60): summarize exret
rolling r(Var), window(60): summarize msciret
rolling r(Var), window(60): summarize msftret
*   For searches and help try:

*   For searches and help try:

*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index