2017-07-15 46 views
0

我正在測試分數據庫上工作,並希望構建兩個觀察值。這些數據包含英語成績,數學成績,排名和每個孩子的唯一ID。讓我們把孩子的人,我們正在建設的意見「焦點小子」基於排名的stata積累

  1. OB數1個平均排名低於焦距的孩子,其數學成績全部孩子的英語成績是高於焦點孩子
  2. 觀測值的所有的孩子2平均英語成績排在焦點的孩子,其數學成績是低於的焦點孩子的

請幫助如果可能的話我寫這段代碼沒有循環。 (我有大約100k觀察)

更新1我正在爲每個孩子而不是僅僅一個孩子建立這些觀察。

+0

你打算計算這兩個值只有一次,對於你確定的一個特定的孩子,或者爲每一個10萬個孩子計算它們嗎?如果你只做了一次,或者如果你的意思是爲每個100k的觀察值增加兩個額外的值,那麼它們會產生很大的差異。 – 2017-07-15 11:54:06

+0

我希望只有一個孩子。這對我來說會更簡單。這是爲每個孩子。這就是嚇到我。 – SreeVathsan

+1

在這種情況下,有關您的數據的更多信息可能會有所幫助。這些隊伍有什麼價值觀 - 1至100,000,或者是百分比級別 - 1至100級別?數學分數有什麼價值?我認爲循環是不可避免的,但如果排名和數學得分的組合很少,則可以避免重複計算相同的組合。 – 2017-07-15 14:25:07

回答

0

循環!

* toy dataset 
clear 
set obs 5 
set seed 2803 
gen id = _n 
gen rnd = runiform() 
sort rnd 
gen rank = _n 
gen math = 100 * runiform() 
gen english = 100 * runiform() 

* code for real 
gen math_above = . 
gen math_below = . 

sort rank 

forval j = 2/`=_N' { 
    local J = `j' - 1 
    su english if math > math[`j'] in 1/`J', meanonly 
    replace math_above = r(mean) in `j' 

    su english if math < math[`j'] in 1/`J', meanonly 
    replace math_below = r(mean) in `j' 
}