Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: RE: Re: Invalid syntax in a program
From
Dani Tilley <[email protected]>
To
[email protected]
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 <[email protected]>
To: [email protected]
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: [email protected]
[mailto:[email protected]] 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 <[email protected]>
To: stata <[email protected]>
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/