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

From |
"Nick Cox" <[email protected]> |

To |
<[email protected]> |

Subject |
RE: st: RE: if command |

Date |
Tue, 18 Jan 2005 19:19:39 -0000 |

I think you were perfectly clear, but this question appears the same to me, and so the answer is the same. You can go in Stata if x == 10 { gen y = 12 gen q = 78 } and this is legal, but it is not what you want, I think. This code is to Stata if x[1] == 10 { gen y = 12 in 1/l gen q = 78 in 1/l } which is rarely what anybody wants. Fortran is no different here from Stata (unless in this respect it has changed since I learnt it 30 years ago), as the apparent equivalent IF (X.EQ.10) THEN Y = 12 Q = 78 ENDIF (.EQ. <--> ==) applies to single values stored in X, Y, Q, not to one-dimensional arrays (Fortran's equivalent of Stata's variables) -- unless there are dialects of Fortran in which you can do this to arrays. I agree that one would occasionally like to say something like whenever x == 10 { gen y = 12 gen q = 78 } (thus leaving -y- and -q- missing whenever x != 10), the -whenever- being vectorised in application, but Stata doesn't have this. Also, there is considerable repetition of work in gen y = 12 if x == 10 gen q = 78 if x == 10 but that's the language as it is now. I think your question is really for StataCorp but they will (usually) maintain cryptic silence on what language features may or may not be added long-term. To put it in a nutshell: With -if { }- just one test is made. If variables appear in the test, that makes no difference. The test is applied to the _first_ observation. With ... if ... as many tests are made as there are observations. (Sometimes that's far more than you want, but that's another story.) Nick [email protected] Cameron Hooper > Nick Cox wrote: > > -if- as a keyword is overloaded. The > > two ways of using -if- you exemplify > > are not equivalent -- unless you have > > single observation datasets. > > I have not been clear. I apologise. I completely agree that > code should > be readable. > > Let me explain. I am not looking for a way to exploit some > unique aspect > of my data to make my code more efficient. So for example, > > gen var1 = (fpi == "big") + 2 * (fpi == "small") > > works, but only for these particular values. > > I am asking a more general question. In stata can I test a > condition and > as a result of this single test generate (or replace) more than one > variable? All of Nick's examples generated one variable as > the result of > testing one logical expression. In Fortran I can write: > > IF (X.GE.10) THEN > Y = 12 > Q = 78 > ENDIF > > Test once, set two variables. The only way I know to do this > in stata is > > gen y = 12 if x == 10 > gen q = 78 if x == 10 > > I have to test x twice. Is there a way in stata to only test the > condition once? I understand that "if exp {}" will not work. > * * 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/

- Prev by Date:
**Re: st: changing display format of macro contents** - Next by Date:
**st: Re: IVreg and curvelinear effects** - Previous by thread:
**Re: st: RE: if command** - Next by thread:
**st: kdens2 and scat3 problems. More general graph problems.** - Index(es):

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