在Stata中,我希望能够根据特定变量将观察结果放入存储桶中,或等效地将观察结果视为属于某个分位数。我四处寻找可以完成这项任务的现有代码,但却找不到我想要的东西。我写了以下简单的ado:
program toquantiles
version 13
syntax varname [, n(integer 4)]
quietly{
local interval = 100/`n'
local binVarName = "`varlist'_quantile"
gen `binVarName' = `n'
local upper = `n'-1
forvalues i=1/`upper'{
local y = `i'*`interval'
//Abuse the egen cmd to calculate the yth percentile.
tempvar x
egen `x' = pctile(`varlist'), p(`y')
//Label this observation as belonging to the ith bin if the value of the
//var in question is greater than x.
replace `binVarName' = `n'-`i' if `varlist' > `x'
drop `x'
}
}
end
输出是每个观察都有一个新的变量,varname_quantile根据它所适合的分位数编码为1,2,3等。我的代码似乎是一个非常天真的方法解决这个问题。
是否有任何内置功能可以完成上述操作?如果没有,这个ado有什么改进可以加快执行速度吗?目前,它运行得很慢。 (慢慢地,总结所有100多个变量比计算1个变量的五分之一更快。)非常感谢。
答案 0 :(得分:1)
这里有一个术语问题,最简单的说明是四分位数,三个特定的汇总统计数据,上下四分位数和中间值,以及第一,第二,第三和第四四分之一(有人说这里也是四分位数),间隔由低于或高于特定四分位数定义。 (当值等于特定四分位数时,会发生什么事情。)
换句话说,四分位数和更一般的分位数可以是特定的水平(我认为是该术语的标准统计用法)或区间(一个常见的(错误?)在某些应用领域中使用该术语,例如应用经济学)。
似乎你想要第二感。
转向Stata,xtile
不这样做吗?
另见http://www.stata.com/support/faqs/statistics/percentile-ranks-and-plotting-positions/index.html