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]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Need help with working across variables |

Date |
Sun, 10 Feb 2013 10:55:49 +0000 |

Corrected version: gen x = . forval j = 1/4 { replace x = var`j' if missing(x) & inlist(var`j', 1, 2) replace x = . if !missing(x, var`j') & var`j' != x } On Sun, Feb 10, 2013 at 10:12 AM, Nick Cox <njcoxstata@gmail.com> wrote: > Here is another way to do it: > > gen x = . > > forval j = 1/4 { > replace x = var`j' if missing(x) & inlist(var`j', 1, 2) > replace x = . if !missing(x) & var`j' != x > } > > So, we initialise to missing; change our minds at the first instance > of 1 or 2; but change it back again if we see a different value in the > same observation. > > For a review of working rowwise, see > > SJ-9-1 pr0046 . . . . . . . . . . . . . . . . . . . Speaking Stata: Rowwise > (help rowsort, rowranks if installed) . . . . . . . . . . . N. J. Cox > Q1/09 SJ 9(1):137--157 > shows how to exploit functions, egen functions, and Mata > for working rowwise; rowsort and rowranks are introduced > > .pdf at http://www.stata-journal.com/sjpdf.html?articlenum=pr0046 > > Nick > > On Sun, Feb 10, 2013 at 5:34 AM, Cory Smith <corybsmith@gmail.com> wrote: >> Too complicated in my opinion. >> >> gen x = 0 >> >> egen Vmin = rowmin(var1 - var4) >> egen Vmax = rowmax(var1 - var4) >> >> replace x = 1 if Vmin == 1 & Vmax == 1 & Vmin != . >> replace x = 2 if Vmin == 2 & Vmax == 2 & Vmin != . >> >> Actually, some of the terms in the above are unnecessary but I kept >> them in for clarity. >> >> On Sun, Feb 10, 2013 at 12:27 AM, Alison Connor <alison.connor@gmail.com> wrote: >>> Hi Michael, >>> >>> There might be a more efficient way to do it, but if you have egenmore >>> you can do: >>> >>> egen x=rall(var1 var2 var3 var4), c(@==1) >>> >>> This will be 1 if all non-missing variables are 1, and 0 otherwise. If >>> you only have two values for your variables, then you can run this >>> command again, and then merge the two into a third variable: >>> >>> egen x1=rall(var1 var2 var3 var4), c(@==1) >>> egen x2=rall(var1 var2 var3 var4), c(@==2) >>> >>> gen x=0 >>> replace x=1 if x1==1 >>> replace x=2 if x2==1 >>> >>> If you are going to do this for multiple values, then you can create a loop: >>> >>> gen x=0 >>> forvalues i=1/2 { >>> egen x`i'=rall(var1 var2 var3 var4), c(@==`i') >>> replace x=`i' if x`i'==1 >>> drop x`i' >>> } > > On Sun, Feb 10, 2013 at 10:41 AM, Michael Stewart > <michaelstewartresearch@gmail.com> wrote: > >>>> Here is my data format and my question: >>>> id var1 var2 var3 var4 >>>> 1 1 1 1 . >>>> 2 1 1 1 1 >>>> 3 1 2 1 . >>>> 4 2 2 2 2 >>>> 5 1 1 1 1 >>>> 6 1 2 . . >>>> 7 2 1 2 . >>>> >>>> I am trying to generate a new variable x =1 if all non missings values >>>> for the variables(per observation) are equal to 1 and x =2 if all non >>>> missings values for the variables(per observation) are equal to 2. I >>>> tried to do foreach loop like >>>> >>>> gen x=0 >>>> foreach x in var1 var2 var3 var4{ >>>> replace x=1 if `x'=1 >>>> } >>>> but it doesnt seem to do the trick >>>> >>>> I am specifically interested in to change x =1 if all nonmissign >>>> values for an observation are equal to one >>>> For example: I would like to replace x=1 for id=1 but not for id 3 >>>> Similarly, I would like to replace x=2 if all nom missing values for >>>> an observation are equal to two. >> * * 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: Need help with working across variables***From:*Nick Cox <njcoxstata@gmail.com>

**References**:**st: Need help with working across variables***From:*Michael Stewart <michaelstewartresearch@gmail.com>

**Re: st: Need help with working across variables***From:*Alison Connor <alison.connor@gmail.com>

**Re: st: Need help with working across variables***From:*Cory Smith <corybsmith@gmail.com>

**Re: st: Need help with working across variables***From:*Nick Cox <njcoxstata@gmail.com>

- Prev by Date:
**Re: st: Need help with working across variables** - Next by Date:
**Re: st: reshaping database with dates ordered in wide format to long format** - Previous by thread:
**Re: st: Need help with working across variables** - Next by thread:
**Re: st: Need help with working across variables** - Index(es):