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]

From |
"Sarah Edgington" <sedging@ucla.edu> |

To |
<statalist@hsphsun2.harvard.edu> |

Subject |
RE: st: Defining upper limit of loop |

Date |
Wed, 11 Dec 2013 15:18:08 -0800 |

Nabin, Ok, the same principle applies as before. You just need to modify things a bit. You don't want to keep adding X+X[_n+`i']. You want to add the next indexed X value to the existing sum. Try something like this: gen sum=X sum Z forv i=1/`r(max)' { replace sum=sum+X[_n+1] if Z>=`i' } -Sarah -----Original Message----- From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nabin Kafle Sent: Wednesday, December 11, 2013 3:11 PM To: statalist@hsphsun2.harvard.edu Subject: Re: st: Defining upper limit of loop Sarah, I want the following result to happen. gen sum=X+X[_n+1] if Z==1 replace sum=X+X[_n+1]+X[_n+2] if Z==2 replace sum=X+X[_n+1] +X[_n+2] + X[_n+3] if Z==3 replace sum=X+X[_n+1] +X[_n+2] + X[_n+3]+X[_n+4] if Z==4 On Wed, Dec 11, 2013 at 5:03 PM, Sarah Edgington <sedging@ucla.edu> wrote: > Nabin, > It looks like you want Stata to do a different thing depending on the > value of Z for a given observation. For a given observation, however, > you don't appear to want to do multiple things. > > For your simple example you could do this without a loop gen > sum=X+X[_n+1] if Z==1 replace sum=X+X[_n+2] if Z==2 replace > sum=X+X[_n+3] if Z==3 replace sum=X+X[_n+4] if Z==4 > > Of course a loop for something that repeats like this helps prevent > typos and is going to be helpful if you have a lot of values of Z to deal with. > > To make it a loop you could do something like: > gen sum=0 > sum Z > forv i=1/`r(max)' { > replace sum =X+X[_n+`i'] if Z==`i' > } > > I suspect your actual task is probably more complicated than your > example, in which case this may or may not get you where you're going. > > In general, though, when working with loops I often find it's > illuminating for me to write out exactly what I want to happen for the > first couple iterations of the loop. If I can get the results I want > for those first few iterations, that often helps make it very clear > what the final loop needs to look like. > > -S > > > -----Original Message----- > From: owner-statalist@hsphsun2.harvard.edu > [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Thomas, > Anthony > Sent: Wednesday, December 11, 2013 2:44 PM > To: statalist@hsphsun2.harvard.edu > Subject: Re: st: Defining upper limit of loop > > Yes, a forval loop will work for that. Nick's explanation describes > how very well. I had thought you wanted to actually reference a variable's name (i.e. > a string). Just be aware that the macro `Z' > needs to evaluate to numeric not string. Sorry for the confusion. > > Anthony > > On Wed, Dec 11, 2013 at 5:30 PM, Nabin Kafle <nkafle89@gmail.com> wrote: >> I want to loop a cycle number of times indicated by a number in a >> variable > name. >> For example: >> X Y Z >> 1 2 1 >> 2 3 4 >> 3 2 2 >> 3 2 2 >> 4 2 2 >> . . . . >> >> gen sum=X >> forvalues i=1/"Z" { >> replace sum=X+X[_n+`i'] >> } >> >> What would be other way to do such if it is not possible by >> -forvalues- > command. >> >> On Wed, Dec 11, 2013 at 4:18 PM, Thomas, Anthony >> <anthony_h_thomas@brown.edu> wrote: >>> Stata probably will not let you do that. Variable names cannot be a >>> number, and "forval" type loops expect a numeric range (i.e. >>> "variable name" would have to be a number). If you want to use >>> variables in a loop, consider using: >>> >>> foreach i of varlist "varlist"{ >>> >>> commands >>> >>> } >>> >>> Anthony >>> >>> On Wed, Dec 11, 2013 at 5:08 PM, Nabin Kafle <nkafle89@gmail.com> wrote: >>>> Is there a way that I can use the forvalues command in stata in a >>>> way that I upper value of the loop can be defined from the varibale > list. >>>> >>>> forvalues i = 1/"var name" { >>>> code for loop >>>> * >>>> * 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/ >> >> >> >> -- >> Nabin Kafle >> * >> * 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/ -- Nabin Kafle * * 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/

**Follow-Ups**:**RE: st: Defining upper limit of loop***From:*"Sarah Edgington" <sedging@ucla.edu>

**References**:**st: Defining upper limit of loop***From:*Nabin Kafle <nkafle89@gmail.com>

**Re: st: Defining upper limit of loop***From:*"Thomas, Anthony" <anthony_h_thomas@brown.edu>

**Re: st: Defining upper limit of loop***From:*Nabin Kafle <nkafle89@gmail.com>

**Re: st: Defining upper limit of loop***From:*"Thomas, Anthony" <anthony_h_thomas@brown.edu>

**RE: st: Defining upper limit of loop***From:*"Sarah Edgington" <sedging@ucla.edu>

**Re: st: Defining upper limit of loop***From:*Nabin Kafle <nkafle89@gmail.com>

- Prev by Date:
**Re: st: Defining upper limit of loop** - Next by Date:
**RE: st: Defining upper limit of loop** - Previous by thread:
**Re: st: Defining upper limit of loop** - Next by thread:
**RE: st: Defining upper limit of loop** - Index(es):