[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

From |
Sanmitra Ghosh <sanmitraz@yahoo.co.uk> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: RE: Problem with "while" and "for" loops. |

Date |
Tue, 25 Jun 2002 13:12:02 +0100 (BST) |

Thank you very much. I have fixed it. The problem lied with the fact that stdidt was never equal to x after its initial value, as you have pointed out. Thanks for the other suggestions. I shall learn the commands "capture" and "forvalue". Sincerely, Sanmitra Ghosh --- Nick Cox <n.j.cox@durham.ac.uk> wrote: > Sanmitra Ghosh wrote > > > I am trying to calculate trend corrected > coefficient > > of variation. But the do file is not running > properly. > > I tried it using both while and for loops. The > problem > > with the while loop is that if there is any > missing > > value for the group variable, the do file > terminates > > there giving a r(2000) message. This problem > doesn't > > occur with the for loop, since there is a nostop > > option. However, it is giving another error > message > > which is r(123), i.e. numlist has too many > numbers. I > > don't know how to get rid of these problems. Could > > anyone kindly give me some suggestions? I am > attaching > > the do files. > > First, please note that Statalist members are asked > _not_ to send attachments to the list, for the usual > reasons (members whose software cannot handle > attachments, > precautions against viruses, etc.). This is > explained in the FAQ. > > Sanmitra's -trial1.do- was > > use "C:\WINDOWS\DESKTOP\temp.dta" > sort stcode distcode time > sum stdist > local min = r(min) > local max = r(max) > gen trend1 = 0 > local i = 1980 > while `i' <= 1991 { > local j = `i' - 1979 > replace trend1 = `j' if time == `i' > local i = `i' + 1} > gen trend2 = 0 > local i = 1992 > while `i' <= 2000 { > local j = `i' - 1991 > replace trend2 = `j' if time == `i' > local i = `i' + 1} > gen period = 0 > replace period = 1 if time >= 1992 > gen adjrsq1 = 0 > gen adjrsq2 = 0 > local x = `min' > while `x' <= `max'{ > reg crop trend1 if (stdist == `x' & period == 0) > replace adjrsq1 = e(r2_a) if (stdist == `x' & period > == 0) > reg crop trend2 if (stdist == `x' & period == 1) > replace adjrsq2 = e(r2_a) if (stdist == `x' & period > == 1) > local x = `x' + 1} > macro drop _min _max _i _j _x > gen cov1 = sqrt(covarr1*(1 - adjrsq1*adjrsq1)) > gen cov2 = sqrt(covarr2*(1 - adjrsq2*adjrsq2)) > > and -trial2.do- was > > use "C:\WINDOWS\DESKTOP\temp.dta" > sort stcode distcode time > sum stdist > local min = r(min) > local max = r(max) > gen trend1 = 0 > local i = 1980 > while `i' <= 1991 { > local j = `i' - 1979 > replace trend1 = `j' if time == `i' > local i = `i' + 1} > gen trend2 = 0 > local i = 1992 > while `i' <= 2000 { > local j = `i' - 1991 > replace trend2 = `j' if time == `i' > local i = `i' + 1} > gen period = 0 > replace period = 1 if time >= 1992 > gen adjrsq1 = 0 > gen adjrsq2 = 0 > > for NUM in num `min'/`max', nos : reg crop trend1 if > (stdist == NUM & period > == 0) \replace adjrsq1 = e(r2_a) if (stdist == NUM & > period == 0) \reg crop > trend2 if (stdist == NUM & period == 1) \replace > adjrsq2 = e(r2_a) if > (stdist == NUM & period == 1) > > macro drop _min _max _i _j > gen cov1 = sqrt(covarr1*(1 - adjrsq1*adjrsq1)) > gen cov2 = sqrt(covarr2*(1 - adjrsq2*adjrsq2)) > > One approach to the troublesome loop is to learn > about -capture-. > > local x = `min' > while `x' <= `max'{ > reg crop trend1 if (stdist == `x' & period == 0) > replace adjrsq1 = e(r2_a) if (stdist == `x' & > period == 0) > reg crop trend2 if (stdist == `x' & period == 1) > replace adjrsq2 = e(r2_a) if (stdist == `x' & > period == 1) > local x = `x' + 1 > } > > I guess that the problem arises if -stdist- is never > equal to > a particular value of `x'. In that circumstance the > regression > will crash, and the -replace- statement following > must not > be attempted: > > local x = `min' > while `x' <= `max'{ > capture reg crop trend1 if (stdist == `x' & period > == 0) > if _rc == 0 { > replace adjrsq1 = e(r2_a) if (stdist == `x' & > period == 0) > } > capture reg crop trend2 if (stdist == `x' & period > == 1) > if _rc == 0 { > replace adjrsq2 = e(r2_a) if (stdist == `x' & > period == 1) > } > local x = `x' + 1 > } > > A secondary point is that in Stata 7, -forvalues- is > nicer > for this construct: > > forval x = `min'/`max'{ > capture reg crop trend1 if (stdist == `x' & period > == 0) > if _rc == 0 { > replace adjrsq1 = e(r2_a) if (stdist == `x' & > period == 0) > } > capture reg crop trend2 if (stdist == `x' & period > == 1) > if _rc == 0 { > replace adjrsq2 = e(r2_a) if (stdist == `x' & > period == 1) > } > } > > Another secondary point is that -if e(sample)- is > useful, here > and elsewhere, if only as a matter of conciseness: > > forval x = `min'/`max'{ > capture reg crop trend1 if (stdist == `x' & period > == 0) > if _rc == 0 { > replace adjrsq1 = e(r2_a) if e(sample) > } > capture reg crop trend2 if (stdist == `x' & period > == 1) > if _rc == 0 { > replace adjrsq2 = e(r2_a) if e(sample) > } > } > > I can't identify what is wrong with the numlist. > > An FAQ in this territory -- cycling through all > possible values -- > > http://www.stata.com/support/faqs/data/for.html > > Nick > n.j.cox@durham.ac.uk > > * > * For searches and help try: > * > http://www.stata.com/support/faqs/res/findit.html > * http://www.stata.com/support/statalist/faq > * http://www.ats.ucla.edu/stat/stata/ __________________________________________________ Do You Yahoo!? Everything you'll ever need on one web page from News and Sport to Email and Music Charts http://uk.my.yahoo.com * * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**st: RE: Problem with "while" and "for" loops.***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

- Prev by Date:
**Re: st: IV and FE panel models** - Next by Date:
**Re: st: two-way fixed effects with unbalanced panels** - Previous by thread:
**st: RE: Problem with "while" and "for" loops.** - Next by thread:
**st: Fixed values restrictions in ordered probit** - Index(es):

© Copyright 1996–2014 StataCorp LP | Terms of use | Privacy | Contact us | What's new | Site index |