Bookmark and Share

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: For loops, If Statements and Delimiters


From   Ryan Stevens <[email protected]>
To   [email protected]
Subject   Re: st: For loops, If Statements and Delimiters
Date   Tue, 12 Feb 2013 12:21:40 -0500

It's good to know I'm not the only one with these types of problems.
And thanks for mentioning vim, I've been looking for a good text
editor.

On Tue, Feb 12, 2013 at 10:09 AM, Jeph Herrin <[email protected]> wrote:
> This happens about once a month or so to me - I isolate a code fragment
> containing macro evaluation that produces an error that I cannot identify. I
> cut, save, paste, save, and it works. I use -vim- for editing, which is
> robust to displaying stray control characters etc, so I have never really
> determined what causes it.
>
> However, I usually only use ; to delimit large matrices or arrays stored as
> macros, so it isn't related to that.
>
> cheers,
> Jeph
>
>
>
> On 2/11/2013 3:24 PM, Ryan Stevens wrote:
>>
>> So I just re-pasted the code I typed for the email, and adapted it for
>> the do file and everything is working fine. I'm still a little dumb
>> founded on where the actual error lay, I think it was some spacing
>> issues with my semi-colons.
>>
>> On Mon, Feb 11, 2013 at 3:01 PM, Joerg Luedicke
>> <[email protected]> wrote:
>>>
>>> Did you look at the -trace-? (-help trace-) Perhaps you could post an
>>> excerpt of it.
>>>
>>> Joerg
>>>
>>> On Mon, Feb 11, 2013 at 2:54 PM, Ryan Stevens <[email protected]> wrote:
>>>>
>>>> I'm guessing that using Stata 12 should have no effect? Also, this is
>>>> code I've extracted from a larger do file and changed a bit to make it
>>>> more general. If you're getting it to work, maybe there's something
>>>> going on with the rest of my do file that I'm unaware of. But I was
>>>> hoping to see if anyone else had had similar issues with delimiters
>>>> and for loops. Thanks both of you for responding so quickly.
>>>>
>>>> Ryan
>>>>
>>>> On Mon, Feb 11, 2013 at 2:48 PM, Joerg Luedicke
>>>> <[email protected]> wrote:
>>>>>
>>>>> FWIW, I cannot replicate this. Running the following in Stata 11.2:
>>>>>
>>>>> *------------------------------------------
>>>>> clear
>>>>> set obs 100
>>>>>
>>>>> forval i=1/3 {
>>>>>          gen var`i' = `i'
>>>>> }
>>>>>
>>>>> # delimit ;
>>>>> local j = 1;
>>>>> foreach x of varlist var1-var3{;
>>>>>         forval i = 1/12{;
>>>>>               if(`j'<3){;
>>>>>                   replace `x' = `x'[`i']-`x'[`j'] in `i';
>>>>>                   local j = `j' + 1;
>>>>>               };
>>>>>               else{;
>>>>>                   replace `x' = `x'[`i']-`x'[`j'] in `i';
>>>>>                   local j = 3;
>>>>>               };
>>>>>          };
>>>>> };
>>>>>
>>>>> *------------------------------------------
>>>>>
>>>>> works as expected:
>>>>>
>>>>> <snip>
>>>>> - forval i = 1/12{
>>>>> - if(`j'<3){
>>>>> = if(1<3){
>>>>> - replace `x' = `x'[`i']-`x'[`j'] in `i'
>>>>> <snip>
>>>>>
>>>>> Joerg
>>>>>
>>>>> On Mon, Feb 11, 2013 at 2:41 PM, Nick Cox <[email protected]> wrote:
>>>>>>
>>>>>> Any suggestion? Mine would include not using ; as a delimiter.   More
>>>>>> positively, I would always put a space before each brace.
>>>>>>
>>>>>> My vague recollection is that there are some very obscure bugs that
>>>>>> can bite with semi-colons, although a search did not turn up a precise
>>>>>> post, but spaces before braces might be the territory.
>>>>>>
>>>>>> Nick
>>>>>>
>>>>>> On Mon, Feb 11, 2013 at 7:30 PM, Ryan Stevens <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> I have been having an issue with using for loop and if statements
>>>>>>> together with a semi-colon delimiter. The following is some example
>>>>>>> code for the problem I've come across:
>>>>>>>
>>>>>>> # delimit ;
>>>>>>> local j = 1;
>>>>>>> foreach x of varlist var1-var3{;
>>>>>>>         forval i = 1/12{;
>>>>>>>               if(`j'<3){;
>>>>>>>                   replace `x' = `x'[`i']-`x'[`j'] in `i';
>>>>>>>                   local j = `j' + 1;
>>>>>>>               };
>>>>>>>               else{;
>>>>>>>                   replace `x' = `x'[`i']-`x'[`j'] in `i';
>>>>>>>                   local j = 3;
>>>>>>>               };
>>>>>>>          };
>>>>>>> };
>>>>>>>
>>>>>>> Whenever I try running this I get an error on my if statement, where
>>>>>>> Stata interprets "< 3" as a variable name. Any suggestions for loops
>>>>>>> and if statements using delimiters would be greatly appreciated.
>>>>>>
>>>>>> *
>>>>>> *   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/
>>>
>>> *
>>> *   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/
*
*   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index