Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Nearest value

From   "Nick Cox" <>
To   <>
Subject   Re: st: Nearest value
Date   Sat, 29 Nov 2003 12:01:34 -0000

Ramani Gunatilaka asked 

> I have a data set with consumption and other variables such 
> as number of
> adults, district, sector for each household.
> I need to write a programme that requires selecting the 
> particular household
> whose consumption is nearest to the mean consumption of all 
> the households. 

and Renzo Comolli replied 
> How do you plan to handle ties (i.e. a case in which there 
> is more than one
> household which is at the same minimal distance from the average
> consumption)?
> If you plan to pick one of them at random then
> . egen meanconsumption=mean(consumption)
> . generate absconsumptiondev=abs(meanconsumption-consumption)
> . sort absconsumptiondev
> . keep in 1
> -sort- already does the randomization for you among ties
> If you plan to keep all the ties
> . egen meanconsumption=mean(consumption)
> . generate absconsumptiondev=abs(meanconsumption-consumption)
> . egen mindevfromavgcons=min(absconsumptiondev)
> . keep if  absconsumptiondev==mindevfromavgcons

In the same spirit, note that you don't need to 
store the mean (which is clearly a constant) in 
a variable. 

su consumption, meanonly 

produces (silently) a mean accessible immediately 
thereafter as -r(mean)-, so you can then 

gen absconsumptiondev = abs(consumption - r(mean))  

Similarly, you don't to need to store the 
minimum in a variable, as a similar approach 
could be used. In this case, however, 

sort absconsumption 

would let you look at the first few households. 

The -egen- approach really comes into its own 
when you want to do something like this 
within (e.g.) panels. 


*   For searches and help try:

© Copyright 1996–2022 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index