Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Dani Tilley <tilleydani@yahoo.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: RE: Re: Invalid syntax in a program |
Date | Mon, 12 Jul 2010 18:25:47 -0700 (PDT) |
Thanks Martin. I just realized what I was doing with the -in- qualifier. ----- Original Message ---- From: Martin Weiss <martin.weiss1@gmx.de> To: statalist@hsphsun2.harvard.edu Sent: Mon, July 12, 2010 5:02:20 PM Subject: st: RE: Re: Invalid syntax in a program <> What was wrong with your old approach? Several things, as it turns out. Firstly, the -in- qualifier restricts the operation to the first observation, which makes the caculation of a maximum meaningless. Second, you need to force Stata to evaluate the first observation of variable "max" explicitly to make this work. Note the second syntax achieves the goal much more elegantly. *********** sysuse auto, clear egen int max=max(rep78) in 1 forv t=1/`=max[1]'{ di in r `t' } su rep78, mean forv t=1/`r(max)'{ di in r `t' } *********** HTH Martin -----Original Message----- From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Dani Tilley Sent: Montag, 12. Juli 2010 22:08 To: stata Subject: st: Re: Invalid syntax in a program Hi guys, Thanks for taking the time. It turns out that the problem was that the program could not access local macros declared elsewhere in the program. So a -forv t=1/`max'- where max was a local declared outside the program would trigger the invalid syntax error. I also noticed that this gave me an error: program command, rclass ... egen int max=max(varname) in 1 forv t=1/max[1] { <code> } ... end I did the following to fix it, but it feels clumsy: egen int max=max(varname) in 1 local max=max[1] drop max forv t=1/`max' { <code> } Any suggestions for a more elegant solution? Thanks so much. DF Tilley ----- Original Message ---- <> Works for me too. Try turning on your trace to see where it stops (-set trace on-) ~ Eric <> Does work for me: *********** capture program drop command program command, rclass version 10.0 syntax varlist(min=1 max=10) foreach v of local varlist { di in r "`v'" } end drop _all gen var1=. gen var2=. command var1 var2 *********** HTH Martin From: Dani Tilley <tilleydani@yahoo.com> To: stata <statalist@hsphsun2.harvard.edu> Sent: Mon, July 12, 2010 3:19:08 PM Subject: Invalid syntax in a program Hi, I'm trying to write a program that will do some fairly involved manipulations on variables. I'll spare you the code, but I've tried it several times and it works just fine. When I try to write a command that will do those operations for me, I get invalid syntax. capture program drop command program command, rclass version 10.0 syntax varlist(min=1 max=10) foreach v of local varlist { <working code goes here> } end command var1 var2 invalid syntax r(198); I also tried the following manually (not in a program): local b var1 var2 foreach v of local b{ <working code> } and everything went smoothly. So I'm completely baffled as to why this wouldn't work in a program with -foreach v of local varlist-. Any help is appreciated. Thanks, DF Tilley * * 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/ * * 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/