Stata 如何删除0.1%的最后观察值

Stata 如何删除0.1%的最后观察值,stata,Stata,我有可变的名称和价格。我想删除每个名字的0.1%的价格观察值 最后的观察结果是价格最高的。没有缺少的值。 如果每个不同的名称至少没有1000个观察值,则只删除最后一个观察值 我如何使用Stata做到这一点呢?我不会仅仅因为某些目的不需要它们就删除那些被认为是指drop的观测值。给定名称的不同值,然后使用新变量NTOFFLAG 如果观察数小于1000,则将自动为0 所以考虑到补充定义 by name: gen long ntokeep = _N - floor(_N/1000) 导致 byso

我有可变的名称和价格。我想删除每个名字的0.1%的价格观察值

最后的观察结果是价格最高的。没有缺少的值。 如果每个不同的名称至少没有1000个观察值,则只删除最后一个观察值


我如何使用Stata做到这一点呢?

我不会仅仅因为某些目的不需要它们就删除那些被认为是指drop的观测值。给定名称的不同值,然后使用新变量NTOFFLAG

如果观察数小于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

最后的观察结果是什么?最新的?价格最高?对于缺少的值,您想做什么?对于每个不同的名称,您是否至少有1000次观察?如果没有,会发生什么?太模糊,尤其是没有任何示例数据或代码尝试。最后的观察结果是什么?价格最高您希望如何处理缺少的值?没有缺少的值。请编辑您的问题,包括我的其他查询的答案。
. 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