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


From   Jeph Herrin <stata@spandrel.net>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: For loops, If Statements and Delimiters
Date   Tue, 12 Feb 2013 10:09:35 -0500

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
<joerg.luedicke@gmail.com> 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 <stevrl7@gmail.com> 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
<joerg.luedicke@gmail.com> 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 <njcoxstata@gmail.com> 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 <stevrl7@gmail.com> 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/


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