楼主: champagne01
2982 8

[一般统计问题] stata赋值人名唯一编码,如何使编码按照年度和人名顺序排列 [推广有奖]

  • 0关注
  • 0粉丝

已卖:3份资源

硕士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
131 个
通用积分
3.0031
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
872 点
帖子
29
精华
0
在线时间
203 小时
注册时间
2019-9-21
最后登录
2022-8-5

楼主
champagne01 发表于 2021-10-30 23:23:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  • A表示公司代码,B表示年度,C是人名。通过egen ID1=group( A C )可以生成唯一的公司+人名编码,但是如何使编码也能够按照年度顺序排列呢?目前能做出的效果如图所示。感谢各位大神了!

clear
input int A int B str9 C
1 2010 "艾一"  
1 2011 "张三"
1 2012 "张三"
2 2010 "李四"
2 2011 "李四"
3 2012 "车八"
3 2013 "王五"
3 2014 "李白"
end
egen ID1=group( A C )


但最终想要实现的效果是:
A        B        C        ID1
1        2010        艾一        1
1        2011        张三        2
1        2012        张三        2
2        2010        李四        3
2        2011        李四        3
3        2012        车八        4
3        2013        王五        5
3        2014        李白        6


二维码

扫码加我 拉你入群

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

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

关键词:Stata tata Group Input egen

1.png (9.97 KB)

1.png

沙发
黃河泉 在职认证  发表于 2021-10-31 18:00:55
根据 Nick Cox 之建议,请试试
  1. gen C2 = sum(C != C[_n-1])
  2. egen wanted = group(A C2)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

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

藤椅
qianchen 发表于 2021-10-31 19:45:33
sencode C,gen(ID)
label drop ID

板凳
fugangxx 在职认证  发表于 2021-11-1 06:25:24
为两位老师的构思点赞
黄老师对C上下两值进行是否相等的逻辑判断,当不相等时为1,相等时为0,对逻辑值进行累加,得到想要结果

另一位老师用对字符编码的命令编码后,再去除标签保留编码值,同样能达到目的,应该再对AC联合分组一下,否则A不是目前数据时有可能得不到想要的结果


报纸
黃河泉 在职认证  发表于 2021-11-1 07:40:15
qianchen 发表于 2021-10-31 19:45
sencode C,gen(ID)
label drop ID
有趣的建议,但请试试
  1. * Example generated by -dataex-. For more info, type help dataex
  2. clear
  3. input int(A B) str9 C float(ID1 ID2)
  4. 1 2010 "艾一" 2 1
  5. 1 2011 "张三" 1 2
  6. 1 2012 "张三" 1 2
  7. 2 2010 "张三" 3 3
  8. 2 2011 "李四" 3 3
  9. 3 2012 "车八" 6 4
  10. 3 2013 "王五" 5 5
  11. 3 2014 "李白" 4 6
  12. end
复制代码

地板
qianchen 发表于 2021-11-1 12:59:59
黃河泉 发表于 2021-11-1 07:40
有趣的建议,但请试试
没看懂为何张三和李四的编码是一样的?

7
黃河泉 在职认证  发表于 2021-11-1 13:31:28
qianchen 发表于 2021-11-1 12:59
没看懂为何张三和李四的编码是一样的?
不好意思,我只改一部份资料,请看底下更正资料
  1. * Example generated by -dataex-. For more info, type help dataex
  2. clear
  3. input int(A B) str9 C float ID1
  4. 1 2010 "艾一" 2
  5. 1 2011 "张三" 1
  6. 1 2012 "张三" 1
  7. 2 2010 "张三" 3
  8. 2 2011 "李四" 4
  9. 3 2012 "车八" 7
  10. 3 2013 "王五" 6
  11. 3 2014 "李白" 5
  12. end

  13. gen C2 = sum(C != C[_n-1])
  14. egen ID2 = group(A C2)
  15. drop C2

  16. sencode C, gen(ID)
  17. label drop ID

  18. list, sepby(ID2)
复制代码
。也就是同一个张三,在两家公司 (可能不同时间) 服务所导致的!
  1. . list, sepby(ID2)

  2.      +----------------------------------+
  3.      | A      B      C   ID1   ID2   ID |
  4.      |----------------------------------|
  5.   1. | 1   2010   艾一     2     1    1 |
  6.      |----------------------------------|
  7.   2. | 1   2011   张三     1     2    2 |
  8.   3. | 1   2012   张三     1     2    2 |
  9.      |----------------------------------|
  10.   4. | 2   2010   张三     3     3    2 |
  11.      |----------------------------------|
  12.   5. | 2   2011   李四     4     4    3 |
  13.      |----------------------------------|
  14.   6. | 3   2012   车八     7     5    4 |
  15.      |----------------------------------|
  16.   7. | 3   2013   王五     6     6    5 |
  17.      |----------------------------------|
  18.   8. | 3   2014   李白     5     7    6 |
  19.      +----------------------------------+
复制代码

8
qianchen 发表于 2021-11-1 14:56:25
前面标题交代是说按照人名唯一编码 实际是按照公司+人名
修改如下:
*方法1
gen C2 = sum(C != C[_n-1])
egen wanted = group(A C2)
*方法2
sencode C,gen(ID3)
label value ID3
egen wanted2 = group(A ID3)
*方法3
msdecode A C ,gen(temp)
sencode temp,gen(wanted3)
label value wanted3
三个方法结果一样

9
champagne01 发表于 2021-12-4 10:43:58
谢谢各位老师的精彩回复,解决了我的问题[em23]感谢感谢~

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-28 06:22