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 |
"Nick Cox" <n.j.cox@durham.ac.uk> |

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

Subject |
RE: st: counting variables within a row |

Date |
Wed, 9 Jun 2010 10:00:49 +0100 |

I endorse Sarah's approach. Another way of writing the code is to change a statement like replace lightcount_d1=lightcount_d1+1 if met_a`num'>0 & met_a`num'<3 to one like replace lightcount_d1=lightcount_d1 + (met_a`num'>0 & met_a`num'<3) The logic here is that parenthesised expression is evaluated as 1 or 0 according to whether it is true of false. This is mostly a matter of taste: many may find the first version more transparent, but roughly speaking the more you program, the more you may like the second version. Nick n.j.cox@durham.ac.uk Sarah Elizabeth Edgington You could use a foreach loop to assess your criteria for each variable and then add 1 to a count variable if it's true. To save myself some typing I'm going to assume a simpler case where you only have five variables but you can extend it beyond that to the full eighteen (note that if you were using variable names with a numeric suffix like met_a1 you could use a forvalues loop). To get your first count it might look something like this: gen lightcount_d1=0 foreach num in one two three four five { replace lightcount_d1=lightcount_d1+1 if met_a`num'>0 & met_a`num'<3 } There may be other ways to do this but this is the first that occurs to me. Casey P. Durand >I have a dataset with 18 variables called met_aone-met_aeighteen. >Within each observation, I'm trying to count the number of these >variables with values which satisfy three criteria. I thought I could >handle this with -egen- and the lines of code I originally wrote are: > >egen lightcount_d1= rownonmiss ( met_aone-met_aeighteen) if ( >met_aone-met_aeighteen)> 0 & ( met_aone-met_aeighteen)< 3 >egen modcount_d1= rownonmiss (met_aone-met_aeighteen) if >(met_aone-met_aeighteen)>= 3.0000 & (met_aone-met_aeighteen)< 6 >egen hardcount_d1= rownonmiss (met_aone-met_aeighteen) if >(met_aone-met_aeighteen)>= 6.0000 & (met_aone-met_aeighteen)< . > >The problem as I quickly realized is that it is only counting >variables when every single value in the row satisfies the if >requirement. What I can't figure out is how to assess each variable >individually for meeting the criteria, but ultimately producing a new >variable with the total within the observation which meets my >criteria. * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**st: counting variables within a row***From:*"Casey P. Durand" <durandca@usc.edu>

**Re: st: counting variables within a row***From:*Sarah Elizabeth Edgington <sedging@ucla.edu>

- Prev by Date:
**st: AW: counting variables within a row** - Next by Date:
**st: Stata 11.1 on Mac breaking user-written commands?** - Previous by thread:
**Re: st: counting variables within a row** - Next by thread:
**st: AW: counting variables within a row** - Index(es):