楼主: danna-33
3307 11

[数据管理求助] stata软件每个变量内以该变量内一段数值填充缺漏值,使得该变量变作一段数字的循环 [推广有奖]

  • 0关注
  • 0粉丝

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
1.0008
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1267 点
帖子
54
精华
0
在线时间
48 小时
注册时间
2016-6-7
最后登录
2023-9-20

楼主
danna-33 发表于 2017-5-22 21:16:21 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,待处理数据格式为year   i
                                     1     .
                                     2     .
                                     3     .
                                     1    4
                                     2    5
                                     3    7
                                     1    .
                                     2    .
                                     3    .
现在想让变量i的缺漏值替换成4 5 7   ,得到一个 457 457 457 的循环,由于原始数据这种变量很多,年份也更长,希望能有一个有效的命令来解决这个问题,谢谢大家~
二维码

扫码加我 拉你入群

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

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

关键词:stata软件 Stata tata 缺漏值 year 软件 stata 计量经济学 数据管理

回帖推荐

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

不会吧?我试过了!

沙发
黃河泉 在职认证  发表于 2017-5-23 08:49:51
我怀疑你的资料不具代表性,是不是应该有一个 id 之类的变量?

藤椅
黃河泉 在职认证  发表于 2017-5-23 09:45:20
试试
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input byte id float(year i)
  4. 1 1 .
  5. 1 2 .
  6. 1 3 .
  7. 2 1 4
  8. 2 2 5
  9. 2 3 7
  10. 3 1 .
  11. 3 2 .
  12. 3 3 .
  13. end

  14. // William Lisowski
  15. bysort year (i): assert missing(i) | i==i[1] if _n > 1
  16. bysort year (i): replace i = i[1]
  17. sort id year
复制代码

板凳
danna-33 发表于 2017-5-23 10:14:16
黃河泉 发表于 2017-5-23 08:49
我怀疑你的资料不具代表性,是不是应该有一个 id 之类的变量?
是的,确实有你所说的id变量,我没有展示出来,很抱歉,这就按你教的方法试一试~~

报纸
danna-33 发表于 2017-5-23 11:21:47
黃河泉 发表于 2017-5-23 09:45
试试
没能实现,可能需要我把数据描述的更详细
group   id    year    i     s
1          1    2000    .    1
1          1    2001    .    2
1          1    2002    .    3
1          2    2000   4    .
1          2    2001   5    .
1          2    2002   7    .
1          3    2000    .    1
1          3    2001    .    2
1          3    2002    .    3
2          4    2000    0    .
2          4    2001    0    .
2          4    2002    1    .
2          5    2000     .    .
2          5    2001     .    .
2          5    2002     .    .
2          6    2000     .    .
2          6    2001     .    .
2          6    2002     .    .
我的目标是每个组内都实现这种填充,具体展示为
group   id    year    i     s
1          1    2000   4    1
1          1    2001   5    2
1          1    2002   7    3
1          2    2000   4    1
1          2    2001   5    2
1          2    2002   7    3
1          3    2000   4    1
1          3    2001   5    2
1          3    2002   7    3
2          4    2000    0    .
2          4    2001    0    .
2          4    2002    1    .
2          5    2000    0    .
2          5    2001    0    .
2          5    2002    1    .
2          6    2000    0    .
2          6    2001    0    .
2          6    2002    1    .
学习了黄老师的代码后,我写得命令为
bysort group year (i): assert missing(i) | i==i[1]  if _n >= 0
bysort group year (i): replace i = i[1]
sort group id year
但是在第一步报错
assertion is flase
老师您看应怎样改进?

地板
danna-33 发表于 2017-5-23 12:57:17
黃河泉 发表于 2017-5-23 09:45
试试
没能实现,可能是我数据描述的不够详细
group  id    year         i
1         1     2000       .
1         1     2001       .
1         1     2002       .
1         2     2000       4
1         2     2001       5
1         2     2002       7
1         3     2000       .
1         3     2001       .
1         3     2002       .
2         4     2000       0
2         4     2001       1
2         4     2002       2
2         5     2000       .
2         5     2001       .
2         5     2002       .
2         6     2000       0
2         6     2001       1
2         6     2002       2
3         7     2000       .
3         7     2001       .
3         7     2002       .
3         8     2000       .
3         8     2001       .
3         8     2002       .
我的目标是在每一group里实现填充缺漏(可能出现整组内 i 都是缺漏的情况),学习了老师的代码后,我写的命令是:bysort group year (i): assert missing(i) | i==i[1]  if _n >= 0
bysort group year (i): replace i = i[1]
sort group id year
但是stata报错:assertion is false
请问老师这种情况该如何纠错?

7
danna-33 发表于 2017-5-23 13:04:00
黃河泉 发表于 2017-5-23 09:45
试试
基于上条回复,我最终想要实现的效果:
group  id    year         i
1         1     2000       4
1         1     2001       5
1         1     2002       7
1         2     2000       4
1         2     2001       5
1         2     2002       7
1         3     2000       4
1         3     2001       5
1         3     2002       7
2         4     2000       0
2         4     2001       1
2         4     2002       2
2         5     2000       0
2         5     2001       1
2         5     2002       2
2         6     2000       0
2         6     2001       1
2         6     2002       2
3         7     2000       .
3         7     2001       .
3         7     2002       .
3         8     2000       .
3         8     2001       .
3         8     2002       .

8
黃河泉 在职认证  发表于 2017-5-23 14:46:24
danna-33 发表于 2017-5-23 11:21
没能实现,可能需要我把数据描述的更详细
group   id    year    i     s
1          1    2000    .   ...
试试
  1. foreach v of varlist i s {
  2.   bys year group (`v'): assert missing(`v') | `v'==`v'[1]  if _n >= 0
  3.   bys year group (`v'): replace `v' = `v'[1]
  4. }  
  5. sort group id year
复制代码

9
danna-33 发表于 2017-5-23 17:52:37
黃河泉 发表于 2017-5-23 14:46
试试
老师,还是报错,== invalid name

10
黃河泉 在职认证  发表于 2017-5-23 17:56:31
danna-33 发表于 2017-5-23 17:52
老师,还是报错,== invalid name
不会吧?我试过了!
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(group id year i s)
  4. 1 1 2000 . 1
  5. 1 1 2001 . 2
  6. 1 1 2002 . 3
  7. 1 2 2000 4 .
  8. 1 2 2001 5 .
  9. 1 2 2002 7 .
  10. 1 3 2000 . 1
  11. 1 3 2001 . 2
  12. 1 3 2002 . 3
  13. 2 4 2000 0 .
  14. 2 4 2001 0 .
  15. 2 4 2002 1 .
  16. 2 5 2000 . .
  17. 2 5 2001 . .
  18. 2 5 2002 . .
  19. 2 6 2000 . .
  20. 2 6 2001 . .
  21. 2 6 2002 . .
  22. end

  23. foreach v of varlist i s {
  24.   bys year group (`v'): assert missing(`v') | `v'==`v'[1]  if _n >= 0
  25.   bys year group (`v'): replace `v' = `v'[1]
  26. }  
  27. sort group id year
复制代码

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

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