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

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

From |
Nick Cox <n.j.cox@durham.ac.uk> |

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

Subject |
st: RE: Re: forvalues, panel data |

Date |
Fri, 1 Oct 2010 11:14:42 +0100 |

I certainly agree with Kit that a -merge- with a file with coefficients is another way to do it, and one worth knowing about. But I can't see it's less error-prone. Either way, someone has to type the numbers in or read them from somewhere else and there is equal scope for error so far as I can see. Nick n.j.cox@durham.ac.uk Christopher Baum Nick Cox > 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> > } 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? * * 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/

**References**:**st: Re: forvalues, panel data***From:*Christopher Baum <kit.baum@bc.edu>

- Prev by Date:
**Re: st: interesting reference** - Next by Date:
**st: RE: RE: how to -expand- and attach new group id to panel data** - Previous by thread:
**st: Re: forvalues, panel data** - Next by thread:
**st: Extracting different portions of string values** - Index(es):