楼主: 财大小学童
3817 11

[一般统计问题] STATA如何行排序呢? [推广有奖]

  • 3关注
  • 0粉丝

硕士生

11%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.1494
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
818 点
帖子
32
精华
0
在线时间
232 小时
注册时间
2019-3-29
最后登录
2024-12-4

楼主
财大小学童 发表于 2021-12-20 15:39:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,我在处理CFPS数据是根据孩子出生年份梳理每个孩子出生的顺序,但是CFPS的孩次顺序有些是乱的(红框标注)。如下图所示,第一栏变量为孩子1、2、3....的出生年份。我想要实现的效果是将每行按照孩子出生年从远到近进行排序,识别出准确的孩次顺序(一孩、二孩...),在STATA里如何用命令实现呢? 排序.png


二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 孩子出生 cfps 出生年份

回帖推荐

黃河泉 发表于6楼  查看完整内容

1. 请 ssc install rowsort 并见其说明。2. (尔后) 你若要问程序,建议请用 (ssc install) dataex 附上相关`代表性’资料 (请尽量不要用截图或其他格式),以供回答者实验之用。请参考说明 https://bbs.pinggu.org/thread-5048204-1-1.html 或https://zhuanlan.zhihu.com/p/29911577。

沙发
财大小学童 发表于 2021-12-20 15:40:25
求教老师们,谢谢了。

藤椅
财大小学童 发表于 2021-12-21 10:43:28
顶一个

板凳
武小宙111 在职认证  发表于 2021-12-21 14:54:31
这类数据很多吗?考虑是否是数据错误。
若不是数据错误,可以试试:
gen a=tbly_a_c2 if tbly_a_c1>tbly_a_c2
gen b=tbly_a_c1 if tbly_a_c1>tbly_a_c2
replace tbly_a_c1=a if tbly_a_c1>tbly_a_c2
replace tbly_a_c2=b if tbly_a_c1>tbly_a_c2
应该是可以的

报纸
Raymond.K 学生认证  发表于 2021-12-21 15:29:58
受访者回答孩子情况时未必按照出生次序回答,因而不应该是数据错误的。至于如何处理,楼上的思路值得借鉴。不过个人感觉应该生成新的变量而不是replace原变量。
即,可以考虑写一个循环,使用冒泡算法排序,结果储存在一系列新生成的变量中,例如child_birthyear1,2,...

地板
黃河泉 在职认证  发表于 2021-12-21 16:57:28
1. 请 ssc install rowsort 并见其说明。2. (尔后) 你若要问程序,建议请用 (ssc install) dataex 附上相关`代表性’资料 (请尽量不要用截图或其他格式),以供回答者实验之用。请参考说明 https://bbs.pinggu.org/thread-5048204-1-1.htmlhttps://zhuanlan.zhihu.com/p/29911577

7
财大小学童 发表于 2021-12-21 17:04:48
武小宙111 发表于 2021-12-21 14:54
这类数据很多吗?考虑是否是数据错误。
若不是数据错误,可以试试:
gen a=tbly_a_c2 if tbly_a_c1>tbly_ ...
感谢回复,你这个方法很有建设性!数据是微观家庭调查数据,应该没有错误,数据量很大我也考虑过用if比较年份判定,不过由于有的家庭存在生育3孩乃至4、5孩的情况,例如会出现出生年份为2000 2004 2001 1998这样的情况,所以多于两个孩子的话判定就十分麻烦。

8
财大小学童 发表于 2021-12-21 17:11:13
Raymond.K 发表于 2021-12-21 15:29
受访者回答孩子情况时未必按照出生次序回答,因而不应该是数据错误的。至于如何处理,楼上的思路值得借鉴。 ...
感谢回复,我想着也是应该重新生成变量。目前只想到了用egen childmin(一孩)=rmax(tb1y1、tb1y2....)和
egen childmax(最近生育的孩子)=rmin(tb1y1、tb1y2....)来确定最早(一孩)孩子和最晚孩子出生的顺序,但是对于两个以上孩子的家庭,中间孩次顺序还是没法解决。

9
财大小学童 发表于 2021-12-23 10:41:28
黃河泉 发表于 2021-12-21 16:57
1. 请 ssc install rowsort 并见其说明。2. (尔后) 你若要问程序,建议请用 (ssc install) dataex 附上相关 ...
黄老师永远的神!非常有用!现在面临的另一个问题就是,用您说的rowsort可以对孩子出生年份(tb1y1、2...10)进行行排序,但是前面还有与之匹配的孩子的编号(pid_c)和性别(tb2_a),如果让这些也跟随年份变动呢?不然会造成出生孩次信息的错乱。数据文件发在后面




10
财大小学童 发表于 2021-12-23 10:49:56
黃河泉 发表于 2021-12-21 16:57
1. 请 ssc install rowsort 并见其说明。2. (尔后) 你若要问程序,建议请用 (ssc install) dataex 附上相关 ...
黄老师,我论坛发不了程序代码,我把dta文件发过来,您有空看一下。 childbirth.dta (31.01 KB)

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

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