Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Christopher Baum <kit.baum@bc.edu> |

To |
"statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |

Subject |
st: Re: forvalues, panel data |

Date |
Fri, 1 Oct 2010 04:03:16 -0400 |

<> On Oct 1, 2010, at 2:33 AM, Nick wrote: > Your -forvalues- scaffolding is completely redundant, and in fact causes the same changes to be executed 11 times. But your problem does call for a loop over a varlist. > > foreach v of var <whatever> { > gen d`v' = . > replace d`v' = `v' if fyear == 1980 > replace d`v' = `v' * 0.967059 if fyear == 1981 > <etc> > } > > Nick > n.j.cox@durham.ac.uk > > Biljana Dlab > > I have panel data (companies, fiscal years) and need to deflate numbers > to US$ 1980 > > tsset gvkey_n fyear > > I used forvalues function and did it like this: > > First I created variable just with dots: > > gen dI2=. > > Then simple forvalues loop > > .forvalues fyear = 1980/1990 { > .replace dI2=I2*1 if fyear==1980 > .replace dI2=I2*0.967059 if fyear==1981 > .replace dI2=I2*0.421106 if fyear==1982 > ... > .replace dI2=I2*0.307175 if fyear==1990 > } > > So that works, but since I have 10 variables (from I1 to I10) that need > to be deflated, repeating the whole procedure is time consuming... so I > tried by using var i=I1-I10, etc... but always got reply invalid > syntax... Rather than having an error-prone replace statement for each year (with all of those if conditions), better to merge the additional characteristics onto each observation, as described in the FAQ http://www.stata.com/support/faqs/data/characteristics.html For example, using the Grunfeld panel data, let's say we have a price deflator for each year and want to apply it to each of 10 investment series: clear all // fake deflator data in a separate file set obs 20 g year = 1934 + _n g defl = exp(_n/100) save defl, replace // apply to panel data webuse grunfeld, clear // make up some numbered vars forv i=1/10 { g invest`i' = invest + runiform() } su invest? // bring in the deflator merge n:1 year using defl // deflate each of the numbered variables in place forv i=1/10 { qui replace invest`i' = invest`i' / defl } su defl invest? Kit Kit Baum | Boston College Economics & DIW Berlin | http://ideas.repec.org/e/pba1.html An Introduction to Stata Programming | http://www.stata-press.com/books/isp.html An Introduction to Modern Econometrics Using Stata | http://www.stata-press.com/books/imeus.html * * 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/

**Follow-Ups**:**st: RE: Re: forvalues, panel data***From:*Nick Cox <n.j.cox@durham.ac.uk>

- Prev by Date:
**st: SV: RE: random number generator for gamma** - Next by Date:
**Re: st: Including age as covariate or using age-stratified estimates in stcox** - Previous by thread:
**st: SV: RE: random number generator for gamma** - Next by thread:
**st: RE: Re: forvalues, panel data** - Index(es):