如何删除0.1%的最后观察结果

时间:2018-04-03 11:44:09

标签: stata

我有变量((MapLocationInteractor)getActivity()).mapLocationUpdated(latlng)name。我想删除每个price的{​​{1}}的最后观察值的0.1%。

最后一次观察在price上最高。没有遗漏的值。 如果每个不同的name没有至少1000个观察值,则只需删除最终观察结果。

如何使用Stata做到这一点?

1 个答案:

答案 0 :(得分:1)

我不会因为出于某种目的而不需要删除(用于表示drop)观察。给定name的不同值,然后是新变量ntoflag

bysort name (price) : gen ntoflag = floor(_N / 1000) 
如果观察数小于1000,

将自动为0

所以考虑补充定义

by name: gen long ntokeep = _N - floor(_N/1000) 

导致

bysort name (price) : gen flag = _n > (_N - floor(_N/1000)) 

作为忽略观察指标的单线解决方案。 (它的否定是观察使用的指标。​​)

然而,这是一个思想实验。假设您有1000个价格,前7个价格都是999.所以,您要忽略0.1%= 1/1000。您想忽略哪7个?现在考虑在同一观察中其他变量可能有不同的值。简而言之,您需要明确一致的关系方法

为了说明这是如何工作的,这里是一个可重复的实验,适用于任何Stata用户,这些用户的数据集要小得多,并且车辆起源前5%的门槛值。

. sysuse auto, clear
(1978 Automobile Data)

. bysort foreign (price) : gen flag = _n > (_N - floor(0.05 * _N))

. list foreign price if flag

     +-------------------+
     |  foreign    price |
     |-------------------|
 51. | Domestic   14,500 |
 52. | Domestic   15,906 |
 74. |  Foreign   12,990 |
     +-------------------+

. bysort foreign : su price

----------------------------------------------------------------------------------
-> foreign = Domestic

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         52    6072.423    3097.104       3291      15906

----------------------------------------------------------------------------------
-> foreign = Foreign

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
       price |         22    6384.682    2621.915       3748      12990