代码观察属于Stata中的分位数

时间:2014-09-24 20:59:28

标签: stata

在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个变量的五分之一更快。)非常感谢。

1 个答案:

答案 0 :(得分:1)

这里有一个术语问题,最简单的说明是四分位数,三个特定的汇总统计数据,上下四分位数和中间值,以及第一,第二,第三和第四四分之一(有人说这里也是四分位数),间隔由低于或高于特定四分位数定义。 (当值等于特定四分位数时,会发生什么事情。)

换句话说,四分位数和更一般的分位数可以是特定的水平(我认为是该术语的标准统计用法)或区间(一个常见的(错误?)在某些应用领域中使用该术语,例如应用经济学)。

似乎你想要第二感。

转向Stata,xtile不这样做吗?

另见http://www.stata.com/support/faqs/statistics/percentile-ranks-and-plotting-positions/index.html