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: Why does Stata return an invalid syntax error in this ado file?
From
Aaron Kirkman <[email protected]>
To
[email protected]
Subject
Re: st: Why does Stata return an invalid syntax error in this ado file?
Date
Fri, 19 Oct 2012 18:23:24 -0500
Hi Nick,
As always, thank you for the corrections and advice, especially about
-set trace on-. The suggested work perfectly.
Aaron
On Fri, Oct 19, 2012 at 5:58 PM, Nick Cox <[email protected]> wrote:
> Except that as advised "String" should be "string".
>
> On Fri, Oct 19, 2012 at 11:53 PM, Nick Cox <[email protected]> wrote:
>> General tips
>>
>> 1. Use -set trace on- to see where the program stops.
>>
>> 2. Always report the return code. Here it is 197, meaning that
>> -syntax- itself is problematic.
>>
>> Specific tips
>>
>> 3. The bug is that the argument of -generate()- should be given as
>> "string", not "String".
>>
>> 4. Your -generate()- option is compulsory. If it is empty, the program
>> won't run. Hence the -if- test is superfluous. Your program can start
>>
>> program define statetofips
>> version 8
>> syntax varname , Generate(String)
>> quietly {
>> gen int `generate' = .
>> replace `generate' = <stuff>
>> ...
>> }
>>
>> 5. Other small changes suggested above.
>>
>> On Fri, Oct 19, 2012 at 11:18 PM, Aaron Kirkman
>> <[email protected]> wrote:
>>
>>> I'm writing a simple ado file, --statetofips--, to assign fips codes
>>> to observations based on the state name. If I run the following code,
>>> I do not receive an error:
>>>
>>> ##
>>> clear
>>> input str8 state
>>> Alabama
>>> Alabama
>>> Alabama
>>> Alaska
>>> Alaska
>>> Alaska
>>> Arizona
>>> Arizona
>>> Arizona
>>> Arkansas
>>> end
>>>
>>> gen int fips = .
>>> replace fips = 1 if lower(state) == "alabama"
>>> replace fips = 2 if lower(state) == "alaska"
>>> replace fips = 4 if lower(state) == "arizona"
>>> ##
>>>
>>> However, if I run this code, I receive an "invalid syntax" error:
>>>
>>> ##
>>> clear
>>> input str8 state
>>> Alabama
>>> Alabama
>>> Alabama
>>> Alaska
>>> Alaska
>>> Alaska
>>> Arizona
>>> Arizona
>>> Arizona
>>> Arkansas
>>> end
>>>
>>> discard
>>> statetofips state, generate(fips)
>>> ##
>>>
>>> These are the contents of --statetofips.ado--, which is located in the
>>> same directory as the above do file:
>>>
>>> ##
>>> program define statetofips
>>> syntax varname , Generate(String)
>>> if "`generate'" != "" {
>>> quietly gen int `generate' = .
>>> }
>>> replace `generate' = 1 if lower(`varlist') == "alabama"
>>> replace `generate' = 2 if lower(`varlist') == "alaska"
>>> replace `generate' = 4 if lower(`varlist') == "arizona"
>>> replace `generate' = 5 if lower(`varlist') == "arkansas"
>>> replace `generate' = 6 if lower(`varlist') == "california"
>>>
>>> end
>>> ##
>>>
>>> I reduced --statetofips.ado-- to its simplest form, and the error persists:
>>>
>>> ##
>>> program define statetofips
>>> syntax varname , Generate(String)
>>> end
>>> ##
>>>
>>>
>>> What is causing the syntax error in the 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/