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]
RE: st: counting variables within a row
From
"Nick Cox" <[email protected]>
To
<[email protected]>
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
[email protected]
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/