2017-07-15 48 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' 
}