楼主: 多拉多占
2652 3

[面板数据求助] 求助一个关于截面内排名并生成变量的问题 [推广有奖]

  • 0关注
  • 1粉丝

已卖:455份资源

高中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
283 个
通用积分
2.7211
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
152 点
帖子
8
精华
0
在线时间
61 小时
注册时间
2014-12-25
最后登录
2024-4-20

楼主
多拉多占 发表于 2020-2-16 00:59:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求助大神,一个有关排名并生成编号的问题。

示例数据如文末所示,假设有17个城市(city_id),两个月(month)的数据。要研究的变量是重污染天数(polluted_day)。

现希望按月对17个城市的重污染天数进行排名。

已经使用了如下命令,生成了一个排名变量:
  1. by month, sort: egen rank=rank(polluted_day)
复制代码

但现在在对并列个体的排名处理上出现了问题。

stata提供的rank函数只有四种排名方式:默认、field、track、unique。分别对应:由小到大排序,并将并列值取所有排序值的均值;由大到小,并将并列值取最大值;由小到大,并将重复值取最小值;从小到大,并将重复值随机分配。
这四种分类方式均不能满足我的要求。这四类排序方法均会使排序的最大值等于截面样本个数。以70  80  90  90  100五个值为例,上述四种排序方法的结果依次是:1  2  3.5  3.5  5 ;5  4  3  3  1; 1  2  3  3  5; 1  2  4  3  5。我不希望并列值占用后续个体的排名,我希望的结果是:1  2  3  3  4

尝试了用group函数加_n的编号方法,但也不成功,因为无法使用by命令。

希望获得解答,得到如上排序结果!


以下为部分数据展示。

  1. *clear
  2. input byte(city_id polluted_day month) float rank
  3. 1  7 1 12
  4. 2 17 1  3
  5. 3  9 1  7
  6. 4  9 1  7
  7. 5 14 1  5
  8. 6 19 1  2
  9. 7 11 1  6
  10. 8  3 1 17
  11. 9  9 1  7
  12. 10 25 1  1
  13. 11 15 1  4
  14. 12  9 1  7
  15. 13  7 1 12
  16. 14  6 1 15
  17. 15  6 1 15
  18. 16  8 1 11
  19. 17  7 1 12
  20. 1  7 2 16
  21. 2 21 2  3
  22. 3 11 2 12
  23. 4 11 2 12
  24. 5 13 2  5
  25. 6 22 2  2
  26. 7 12 2  6
  27. 8  6 2 17
  28. 9 12 2  6
  29. 10 25 2  1
  30. 11 15 2  4
  31. 12  9 2 15
  32. 13 12 2  6
  33. 14 12 2  6
  34. 15 12 2  6
  35. 16 12 2  6
  36. 17 11 2 12
  37. end
复制代码

初次发帖,如有不当,还请见谅!

希望获得高手指教!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata

沙发
黃河泉 在职认证  发表于 2020-2-16 08:59:24
请先安装 ssc install runby, 试试
  1. cap program drop temp  
  2. program define temp        
  3.   gen a = -polluted_day
  4.   egen wanted = group(a)
  5. end

  6. runby temp, by(month)
  7. sort month wanted
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
多拉多占 + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
黃河泉 在职认证  发表于 2020-2-16 09:10:23
或是
  1. cap program drop temp3
  2. program define temp3         
  3.   egen rank3 = group(polluted_day)
  4. end

  5. runby temp3, by(month)
  6. sort month rank3
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
多拉多占 + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
多拉多占 发表于 2020-2-16 10:24:24
感谢感谢!两种方法都好用。只是不知道原理。慢慢学习吧!多谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-20 16:59