我有一个变量ranking
,它由许多不同大小的组组成,这些组都进行了排名。因此,一组可能是 1-6,下一个 1-4 和下一个 1-52。
我知道想要创建两个变量,分别将个人与他之上和之下的所有个人之间的差异相加。
对于一组 5 个人和个人 1 这意味着我想得到
上:和(1-1)=0 下:和((1-5)+(1-4)+(1-3)+(1-2))=-10
我有一个变量ranking
,它由许多不同大小的组组成,这些组都进行了排名。因此,一组可能是 1-6,下一个 1-4 和下一个 1-52。
我知道想要创建两个变量,分别将个人与他之上和之下的所有个人之间的差异相加。
对于一组 5 个人和个人 1 这意味着我想得到
上:和(1-1)=0 下:和((1-5)+(1-4)+(1-3)+(1-2))=-10
这里似乎需要一些相当大的猜测。对排名差异求和似乎不太可能是您想要的,因为这些只是几个算术级数,不能提供有关数据的信息。
以下是可重现的,可能会有所帮助。
. sysuse auto, clear
. bysort rep78 (mpg) : gen rank = _n
. bysort rep78 (rank) : gen cuscore = sum(mpg)
. bysort rep78 (rank) : gen above = cuscore - mpg
. bysort rep78 (rank) : gen below = cuscore[_N] - cuscore
谢谢尼克,
这实际上非常有帮助。我做了一些小的修改以获得我想要的东西,并检查它是否在数据窗口中工作。我很抱歉没有很好地表达我的问题并且没有提供玩具示例。
这是我修改后的答案,如果将来有人通过这篇文章发表评论
sysuse auto, clear
*just to have a better overview in the data window
keep mpg rep78
*creates ranking first by rep78 and within that by mpg
bysort rep78 (mpg) : gen rank = _n
*Sums mpg by rep78 and then by rank
bysort rep78 (rank) : gen cuscore = sum(rank)
*Create up as sum of the ranks minus individual rank
bysort rep78 (rank) : gen up= cuscore - rank
bysort rep78 (rank) : gen down= cuscore[_N] - cuscore