楼主: 破碎
5565 14

[数据管理求助] 怎么取多个变量间排行第二的值 [推广有奖]

  • 0关注
  • 0粉丝

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
630 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
46 点
帖子
4
精华
0
在线时间
32 小时
注册时间
2010-11-24
最后登录
2019-5-10

40论坛币

         id     x1   x2   x3   x4   x5   x6
          1    13   14   12   2   23    56
          2    2    34   56   43  21   12
          3    2     3   45    1   23    34
          4    4    6     13   14  22   45
          5    2    4    23    56  78  23
      想针对不同的id,分别取x1-x6排行第一,第二,第三,第四,第五,第六的值,请问怎么做呢?
                只知道取最大值好像是 gen var=rowmax(x1 x2 x3 x4 x5 x6).
      谢谢大家

关键词:多个变量 max 最大值 怎么做 wma

本帖被以下文库推荐

沙发
夏目贵志 发表于 2017-4-12 00:11:37 |只看作者 |坛友微信交流群
并不是没办法但是好像有点麻烦。你数据有多少?

使用道具

藤椅
破碎 发表于 2017-4-12 08:19:42 |只看作者 |坛友微信交流群
夏目贵志 发表于 2017-4-12 00:11
并不是没办法但是好像有点麻烦。你数据有多少?
挺多的,有2-4万的样子

使用道具

板凳
momingqimiao7 在职认证  学生认证  发表于 2017-4-12 09:10:31 |只看作者 |坛友微信交流群
可以用rowpctile分位数来求
譬如说你想求排行第二的数值,
公式具体为egen var=rowpctile(x1 x2 x3 x4 x5 x6), p(70)
求第二大的话p数值就在(4/6*100,5/6*100)之间
求第三大的话p数值就在(3/6*100,4/6*100)之间

使用道具

报纸
黃河泉 在职认证  发表于 2017-4-12 10:41:45 |只看作者 |坛友微信交流群
请试试
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(id x1 x2 x3 x4 x5 x6)
  4. 1 13 14 12  2 23 56
  5. 2  2 34 56 43 21 12
  6. 3  2  3 45  1 23 34
  7. 4  4  6 13 14 22 45
  8. 5  2  4 23 56 78 23
  9. end

  10. reshape long x, i(id)
  11. sort id x
  12. drop _j
  13. bys id: gen n = _n  
  14. reshape wide x, i(id) j(n)
复制代码
已有 1 人评分论坛币 收起 理由
夏目贵志 + 10 观点有启发

总评分: 论坛币 + 10   查看全部评分

使用道具

地板
黃河泉 在职认证  发表于 2017-4-12 10:42:02 |只看作者 |坛友微信交流群
1.        请就如同美国Stata论坛一样,我建议本论坛也应强烈鼓励所有发问者利用 dataex (先 ssc install dataex 并见 https://bbs.pinggu.org/thread-5048204-1-1.html 说明) 将其之 Stata (部分) 资料列出 (可能的话,你要的结果型态),以供回答者练习或转post到美国Stata论坛之用(所以你的问题会得到解决)。
2.        当你 post 你的资料时,你应该选择你原始资料中具有代表性的一部分(除非你的资料很小,或自己编一下有代表性的变量与资料),包括足够的观察值以供程式练习与展示之用,而且也要确定包括了所有的变量!

使用道具

7
austen06 发表于 2017-4-16 08:42:20 |只看作者 |坛友微信交流群
  1. forvalues i = 1/6{

  2.         egen var`i' = rowmax(x1 x2 x3 x4 x5 x6)

  3.         forvalues j = 1/6{
  4.                 replace x`j' = . if x`j' == var`i'
  5.         }
  6. }
复制代码

使用道具

8
黃河泉 在职认证  发表于 2017-4-16 10:53:49 |只看作者 |坛友微信交流群
austen06 发表于 2017-4-16 08:42
其实后来从美国 Stata 论坛学到更简洁之方法:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(id x1 x2 x3 x4 x5 x6)
  4. 1 13 14 12  2 23 56
  5. 2  2 34 56 43 21 12
  6. 3  2  3 45  1 23 34
  7. 4  4  6 13 14 22 45
  8. 5  2  4 23 56 78 23
  9. end

  10. // search rowsort, and install
  11. rowsort x1-x6, gen(y1-y6)

  12. // search sortrows, and install
  13. sortrows x1-x6, replace
复制代码
已有 1 人评分热心指数 收起 理由
蓝色 + 3 精彩帖子

总评分: 热心指数 + 3   查看全部评分

使用道具

9
austen06 发表于 2017-4-17 00:10:07 |只看作者 |坛友微信交流群
黃河泉 发表于 2017-4-16 10:53
其实后来从美国 Stata 论坛学到更简洁之方法:
这个是Nicholas J. Cox写的package啊

使用道具

10
黃河泉 在职认证  发表于 2017-4-17 07:14:50 |只看作者 |坛友微信交流群
austen06 发表于 2017-4-17 00:10
这个是Nicholas J. Cox写的package啊
没错,其实就是 Nick 与其共同作者回答的!

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-18 02:22