我有变量((MapLocationInteractor)getActivity()).mapLocationUpdated(latlng)
和name
。我想删除每个price
的{{1}}的最后观察值的0.1%。
最后一次观察在price
上最高。没有遗漏的值。
如果每个不同的name
没有至少1000个观察值,则只需删除最终观察结果。
如何使用Stata做到这一点?
答案 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