Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


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

Re: st: RE: Re: Invalid syntax in a program


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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index