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 |
Pathmeswaran <pathmes@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

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 <ojones@wiwi.uni-bielefeld.de> 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/

**Follow-Ups**:**Re: st: Re: calculating proportions***From:*Ekaterina Hertog <ekaterina.hertog@sociology.ox.ac.uk>

**References**:**st: Re: calculating proportions***From:*Pathmeswaran <pathmes@gmail.com>

**Re: st: Re: calculating proportions***From:*Oliver Jones <ojones@wiwi.uni-bielefeld.de>

- Prev by Date:
**Re: st: Re: calculating proportions** - Next by Date:
**st: population weights question** - Previous by thread:
**Re: st: Re: calculating proportions** - Next by thread:
**Re: st: Re: calculating proportions** - Index(es):