2014-09-24 32 views
0

在Stata中,我希望能夠根據特定變量將觀測值放入桶中,或等價地將觀測代碼編碼爲屬於某個分位數。我四處尋找可以完成這項任務的現有代碼,但並未完全找到我想要的內容。我寫了下面簡單費周折:代碼觀測屬於Stata中的分位數

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 

的輸出是每個觀察有一個新的變量,即基於其中它適合位數編碼爲1,2,3等varname_quantile。我的代碼看起來像是一個非常天真的方法來解決這個問題。

有沒有什麼內置的功能,做我以上做的?如果沒有,這個ado會有什麼改進來加速執行嗎?目前,它運行速度很慢。 (慢慢地,所有100個變量的總和比計算1個變量的五分位數要快得多。)非常感謝。

+1

您是否檢查過'help xtile'? – 2014-09-24 21:14:40

回答

1

這裏有一個術語問題,最簡單地通過四分位數,三個特別的彙總統計,下和上四分位數和在之間的中間,並且所述第一,第二,第三和第四季度所示(一說這裏也是四分位數),由低於或高於特定四分位數定義的間隔。 (當值等於特定四分位數是習慣問題,會發生什麼。)

換句話說,位數和更普遍的分位數是特別有水平(這我認爲是標準的統計術語的使用)或間隔(在某些應用領域中常見(誤用)該術語,例如應用經濟學)。

看來你想要第二感。

談談Stata,是不是xtile這樣做?

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

+0

謝謝,'xtile'正是我一直在尋找的。不知道我在文檔中沒有看到。 – 2014-09-24 21:28:19

+0

一個驚人的差距是無法很容易地將xtile應用於多個子集,但在SSC上查看來自egenmore的專用egen功能。 – 2014-09-24 21:29:40