Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: Loop with capture

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: Loop with capture Date Wed, 24 Oct 2012 20:31:46 +0100

```If I understand this correctly, it looks, and is, difficult because
you have separate variables for separate years 1970, 1980, 1990. I
recommend a -reshape- long and then most things you might want to do
will be easier, including the interpolation (if that's what is).

reshape long x1 x2 x3, i(whatever) j(year)

Nick

On Wed, Oct 24, 2012 at 7:53 PM, Daniel Escher <descher@nd.edu> wrote:

> I am looking for advice about how to get my loop to capture and skip a
> year, not a variable.
>
> foreach v of newlist x1 x2 x3... {
>       capture noisily: {
>          capture confirm number `=`i'[1]' // in case that variable
>          if _rc==0 {
>             cap gen `v'1972 = (`v'1980-`v'1970)/10*2+`v'1970
>             cap gen `v'1976 = (`v'1980-`v'1970)/10*6+`v'1970
>             cap gen `v'1984 = (`v'1990-`v'1980)/10*4+`v'1980
>             ...
>             }
>       }
> }
>
> The problem is that x1 does not exist in 1970, but it does in 1980 and
> 1990. The loop as written skips the variable x1 instead of just
> skipping x11972 and x11976. Can I get the loop to skip just the
> year(s) when a variable does not exist?
>
> After reading Nick Cox's article
> (http://www.stata-journal.com/sjpdf.html?articlenum=pr0005 (p. 211)),
> I realized I could do the following:
>
> foreach v of newlist x1 x2 x3... {
>             cap gen `v'1972 = (`v'1980-`v'1970)/10*2+`v'1970
>             cap gen `v'1976 = (`v'1980-`v'1970)/10*6+`v'1970
> ...
> }
>
> That's a good work-around for now, but in the future, is there a way
> to avoid putting "cap" at the start of each command line? Thank you