[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 |
st: RE: Two-word commands with gettoken |

Date |
Sun, 8 Mar 2009 18:56:21 -0000 |

I wouldn't use globals here, or indeed almost anywhere else. Anyone watching needs to know that local macro 0 is special; it is born as whatever the user types after the command line. It can be redefined, as here with -gettoken-. A little inelegant, but practical, is to do something like this: program define mycmd local typed `0' gettoken subcmd 0: 0 if "`subcmd'"=="reg" | "`subcmd'"=="areg" | "`subcmd'"=="xtreg" { mycmd_ols `typed' } else if "`subcmd'"=="ivreg" | "`subcmd'"=="xtivreg" | "`subcmd'"=="ivreg2" | "`subcmd'"=="xtivreg2" { mycmd_iv `typed' } else error 199 end and then parse away. Alternatively, don't use -gettoken- at all. That sounds better. program define mycmd local subcmd : word 1 of `0' if "`subcmd'"=="reg" | "`subcmd'"=="areg" | "`subcmd'"=="xtreg" { mycmd_ols `0' } else if "`subcmd'"=="ivreg" | "`subcmd'"=="xtivreg" | "`subcmd'"=="ivreg2" | "`subcmd'"=="xtivreg2" { mycmd_iv `0' } else error 199 end Nick n.j.cox@durham.ac.uk -----Original Message----- From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Augusto Cadenas Sent: 07 March 2009 20:09 To: statalist@hsphsun2.harvard.edu Subject: st: Two-word commands with gettoken Hello, I have a question about -gettoken- and programming in Stata. The stata help file suggests that -gettoken- can be used to create a two-word command. This is the example that is given: *** begin example *** program define mycmd gettoken subcmd 0: 0 if "`subcmd'"=="list" { mycmd_l `0' } else if "`subcmd'"=="generate" { mycmd_g `0' } else error 199 end program define mycmd_l ... end program define mycmd_g ... end *** end example *** I wonder how I could use the `subcmd' that has been determined by the first program, -mycmd-, within the sub-programs -mycmd_l- and -mycmd_g- without referring to it explicitly. To make a concrete example: In my case I want a program to do two similar, but slightly different things depending on whether I am doing an OLS regression or an IV regression. So the setup I have in mind is like: *** begin example *** program define mycmd gettoken subcmd 0: 0 if "`subcmd'"=="reg" | "`subcmd'"=="areg" | "`subcmd'"=="xtreg" { mycmd_ols `0' } else if "`subcmd'"=="ivreg" | "`subcmd'"=="xtivreg" | "`subcmd'"=="ivreg2" | "`subcmd'"=="xtivreg2" { mycmd_iv `0' } else error 199 end program define mycmd_ols ... `subcmd' `0' ... end program define mycmd_iv ... `subcmd' `0' ... end *** end example *** But this does not work, I guess because `subcmd' is not recognized within the next program. How do I get around that? It's two days I'm trying and I haven't found a solution. Thanks for any suggestions. AC * * 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/ * * 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: Two-word commands with gettoken***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

**References**:**st: Two-word commands with gettoken***From:*Augusto Cadenas <aug.cadenas@googlemail.com>

- Prev by Date:
**Re: st: AW: preserving missing values when using total** - Next by Date:
**RE: st: AW: preserving missing values when using total** - Previous by thread:
**RE: st: Re: Two-word commands with gettoken** - Next by thread:
**st: RE: RE: Two-word commands with gettoken** - Index(es):

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