Bookmark and Share

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: Re: calculating proportions


From   Pathmeswaran <[email protected]>
To   [email protected]
Subject   Re: st: Re: calculating proportions
Date   Tue, 21 Feb 2012 22:15:19 +0530

Thanks Oliver.

With your help I was able to learn 3 things on my first day in statalist!

  forvalues
  `r(N)'
  indentation in foreach/ forvalue loops

*************** example code begins **************************

version 8
clear all
set obs 7

gen byte id = _n

gen byte sex = 1
replace sex = 0 in 4/7
label def lbl_sex 0 "male" 1 "female"
label values sex lbl_sex

gen int income = 7
replace income = 10 in 3
replace income = 0 in 4
replace income = 7 in 5
replace income = 9 in 6
replace income = 11 in 7

list

* I have just copied Oliver's code

sort sex
gen idm=_n if sex==0
* idm is a unique number for each male

gen fa=.
label variable fa "Number of females with higher income"

gen fb=.
label variable fb "Number of females with lower income"

gen fe=.
label variable fe "Number of females with equal income"

* The variables fa, fb & fe are generated individually for each male
in the following loop
quietly{
	count if sex == 0
	local N_male = `r(N)'

	count if sex == 1
	local N_female = `r(N)'

	forvalues i = 1/`N_male' {
		egen int feabove = rank(income) if sex==1 | (sex==0 & idm==`i'), field
		replace fa= feabove - 1 if idm==`i'
		drop feabove

		egen int febelow = rank(income) if sex==1 | (sex==0 & idm==`i'), track
		replace fb=  febelow - 1 if idm==`i'
		drop febelow

		replace fe=`N_female' - ( fa+ fb) if idm==`i'
	}
}

* Converting the numbers to proportions

gen fap=fa/`N_female'
label variable fap "Proportion of females with higher income"

gen fbp=fb/`N_female'
label variable fbp "Proportion of females with lower income"

gen fep=fe/`N_female'
label variable fep "Proportion of females with equal income"

**************** example code ends ***************************


With regards,

Pathmes


Prof A Pathmeswaran
Professor in Public Health
Faculty of Medicine, University of Kelaniya
Ragama, Sri Lanka
+94 11 295 3411

"Not everything that counts can be counted and not everything that can
be counted counts"





On 21 February 2012 21:09, Oliver Jones <[email protected]> wrote:
> Hi Pathemes,
>
> your code looks good to me, but I'm no programmer.
>
> I just have two very minor and highly subjective suggestions:
>
>
> 1.
> in the foreach statement use a local to tell Stata the end of the numlist,
> i.e.
> count if sex == 0
> local N_male = `r(N)'
> foreach i of numlist 1/`N_male' {
> and by the way in this case it might be more appropriate to use forvalues
> insteed, which is the fastest way to loop over consecutive values, such as
> looping over numbers from 1 to k. (From the Stata Help to foreach)
>
>
> 2.
> Indent after the foreach / forvalues statement, i.e.
> forvalues i = 1/`N_male' {
>        code
>        code
>        code
> }
>
> Best
> Oliver
>
>

*
*   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index