Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down at the end of May, and its replacement, **statalist.org** is already up and running.

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

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Unable to clear "invalid syntax r(197);" error in user-written .ado file |

Date |
Fri, 5 Oct 2012 17:39:29 +0100 |

You're welcome. As a further footnote, note that your previous program made -byvar()- an optional option, but would in fact fail if it were not specified. That is, with no -byvar()- specified, sort `byvar' would just be interpreted as sort which is not acceptable to Stata, and the program would fail. Of course, if the program were just to be used by you and you would always specify -byvar()- then you would not be bitten in practice. Nick That's no longer true of the version below, although I can't claim I was thinking about this detail when I wrote it. On Fri, Oct 5, 2012 at 2:53 PM, Richard Herron <richard.c.herron@gmail.com> wrote: > Works like a charm! Thanks for the education, Nick and Joe. > > On Fri, Oct 5, 2012 at 5:23 AM, Nick Cox <njcoxstata@gmail.com> wrote: >> Your program accepts -if- and -in-, but does nothing about them. >> -marksample- is the way to do this. >> >> Setting aside the string default issue answered by Joseph, a revised >> program might be something like >> >> program atrim >> version 11.2 >> syntax varlist(numeric) [if] [in] /// >> [, Byvar(string) Tail(real 0.5) Suffix(string)] >> >> quietly { >> >> marksample touse, novarlist >> count if `touse' >> if r(N) == 0 error 2000 >> >> tempvar thisuse pct >> gen byte `thisuse' = . >> >> foreach x of local varlist { >> replace `thisuse' = `touse' & !missing(`x') >> bysort `thisuse' `byvar': egen `pct' = rank(`x') >> bysort `thisuse' `byvar' : replace `pct' = 100 * (`pct' - 0.5) / _N >> generate `x'_`suffix' = `x' if `thisuse' & inrange(`pct', >> `tail', 100 - `tail') >> drop `pct' >> } >> } >> >> end >> >> On Fri, Oct 5, 2012 at 3:24 AM, Richard Herron >> <richard.c.herron@gmail.com> wrote: >>> I wrote an .ado file to trim data in the left and right tails, but I >>> can't get past an "invalid syntax r(197)" error. My -syntax- line is >>> as follows. >>> >>> * begin syntax line >>> syntax varlist(numeric) [if] [in] /// >>> [, Byvar(string fyear) Tail(real 0.5) Suffix(string tr)] >>> * end syntax line >>> >>> I would like to use a -varlist- so that I can loop over the supplied >>> variables, but I can't clear the error using -varname- or by dropping >>> the -if- and -in- statements. I also tried making the options required >>> without defaults, but that didn't work either. >>> >>> What is my misunderstanding of syntax? Thank you! >>> >>> Below is the complete .ado file. I use Stata SE 11.2 (64 bit) on Windows 7. >>> >>> * begin .ado file >>> *! 0.1 Richard Herron 10/3/2012 >>> program atrim >>> version 11.2 >>> syntax varlist(numeric) [if] [in] /// >>> [, Byvar(string fyear) Tail(real 0.5) Suffix(string tr)] >>> >>> * rather than -bysort- twice below >>> sort `byvar' >>> >>> * not necessary to tokenize; loop varlist >>> foreach x of local varlist { >>> >>> * determine percentiles >>> by `byvar': egen num = count(`x') if !missing(`x') >>> by `byvar': egen ran = rank(`x') if !missing(`x') >>> generate pct = 100 * (ran - 0.5) / num >>> >>> * replace tails with -sysmiss- >>> generate test = if inrange(pct, `tail', `=100 - `tail'') >>> generate `x'_`suffix' = cond(test, `x', .) >>> >>> * drop "temporary" variables >>> drop num ran pct test >>> >>> } >>> >>> end >>> * end .ado file >> * >> * For searches and help try: >> * http://www.stata.com/help.cgi?search >> * http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/

**References**:**st: Unable to clear "invalid syntax r(197);" error in user-written .ado file***From:*Richard Herron <richard.c.herron@gmail.com>

**Re: st: Unable to clear "invalid syntax r(197);" error in user-written .ado file***From:*Nick Cox <njcoxstata@gmail.com>

**Re: st: Unable to clear "invalid syntax r(197);" error in user-written .ado file***From:*Richard Herron <richard.c.herron@gmail.com>

- Prev by Date:
**RE: st: Re: st: Re: st: Re: st: Re: st: Re: st: RE: Truncated sample or Heckman selection** - Next by Date:
**Re: st: xtmelogit: comparing models** - Previous by thread:
**Re: st: Unable to clear "invalid syntax r(197);" error in user-written .ado file** - Next by thread:
**Re: st: Re: Spanish characters from windows to mac** - Index(es):