[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> |

Subject |
Re: st: for commands |

Date |
Tue, 4 Nov 2003 22:56:04 -0000 |

Andrew Eggers > I am used to using the "for" command to write a command that calls > members from more than one list in order. For example: > for any a b c \ num 1/3 \ any g h i: gen XYZ = 0 > would generate three variables named a1g, b2h, and c3i, each filled > with zeros. > I am trying to graduate from <for> to <forvalue> and <foreach>, and > wondered how I can do as above with these newer commands. I wrote about this on 16 October 2002 http://www.stata.com/statalist/archive/2002-10/msg00374.html and more recently in Stata Journal 3(2):185--202 (2003). That article was a sequel to the article in Stata Journal 2(2):202--222 (2002), a shortened version of which is available at the URL kindly cited by Dimitriy Masterov in a previous posting. (The printed version is much fuller than the internet version, apart from a partly accidental, partly contrived triple pun on fortitude (forty-twode) - page 42 - the answer to the question in Douglas Adams' book.) Be that as it may, the sequel says much more about Andrew's problem than does the prequel. In essence, -for- stars at the kind of parallel problem cited by Andrew, whereas -foreach- stars at nested problems. (This distinction is expanded in the 16 Oct 2002 posting.) Apart from the answer you don't want foreach v in a1g b2h c3i { gen `v' = 0 } there are various ways to do it, discussed in SJ 3(2): 185--202. Here is one: local Y "1 2 3" local Z "g h i" local i = 1 foreach x in a b c { local y : word `i' of `Y' local z : word `i++' of `Z' gen `x'`y'`z' = 0 } You don't like it? I don't blame you (although it's more long-winded than it need be). Here's another one. As so often, we could exploit whatever structure happens to exist: local Z "g h i" local i = 0 foreach x in a b c { local z : word `++i' of `Z' gen `x'`i'`z' = 0 } No, it's not much better. However, 1. -for- is optimised for parallel problems; -foreach- is optimised for nested problems. Each is better playing at home, not surprisingly. 2. I have used -foreach- fairly intensively over the last couple of years, and I'd say that parallel problems like Andrew's (i.e. selecting one value from each of 3 or more lists) arise in practice pretty rarely. Your experience may differ. 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/

- Prev by Date:
**st: create a contingency table** - Next by Date:
**Re: st: create a contingency table** - Previous by thread:
**st: one-sided mutltinomial testing with exact inference** - Next by thread:
**st: Reducing number of labels on bar graph** - Index(es):

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