楼主: 是袁啊
4175 11

[数据管理求助] stata中变量前移 [推广有奖]

  • 1关注
  • 0粉丝

已卖:6份资源

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
1.4342
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
456 点
帖子
23
精华
0
在线时间
151 小时
注册时间
2018-6-9
最后登录
2024-3-19

楼主
是袁啊 发表于 2021-11-4 16:20:45 |AI写论文
50论坛币
数据清洗后,产生了大量空位,想要把后面的数值提前。
就像图里这几行,从第二行开始,a列和a2列都没有数据了。请问怎么能把后面的提前到a列和a2列?并且当a列和a2列有数据时,就放到b列和b2列。
这个循环语句应该怎么写呢? 捕获.PNG

最佳答案

cw666 查看完整内容

要把原位置变缺失值的话,试试这样
关键词:Stata tata 循环语句

沙发
cw666 发表于 2021-11-4 16:20:46
是袁啊 发表于 2021-11-4 20:21
替换确实提前了,但是没办法把原位置的相同数据变为缺失值。另外,上面忘说了,我有从a到j共10对这样的数 ...
要把原位置变缺失值的话,试试这样
  1. foreach x in b c d e f g h i j{
  2.         gen temp = a
  3.         replace a = `x' if a == . & `x' != .
  4.         replace `x' = . if temp == . & a != .
  5.         drop temp
  6. }
  7. foreach x in c d e f g h i j{
  8.         gen temp = b
  9.         replace b = `x' if b == . & `x' != .
  10.         replace `x' = . if temp == . & b != .
  11.         drop temp
  12. }
复制代码

藤椅
cw666 发表于 2021-11-4 19:00:14
不知道是不是这个意思
  1. replace b = c if a != . & b == .
  2. replace b = d if a != . & b == .
  3. replace b2 = c2 if a2 != . & b2 == .
  4. replace b2 = d2 if a2 != . & b2 == .
  5. replace a = c if a == .
  6. replace a = d if a == .
  7. replace a2 = c2 if a2 == .
  8. replace a2 = d2 if a2 == .
复制代码

板凳
是袁啊 发表于 2021-11-4 20:21:39
cw666 发表于 2021-11-4 19:00
不知道是不是这个意思
替换确实提前了,但是没办法把原位置的相同数据变为缺失值。另外,上面忘说了,我有从a到j共10对这样的数组,单纯replace好像不太行的谢谢您的回复!

报纸
qianchen 发表于 2021-11-4 20:44:06
把数据和预期结果一部分用dataex贴出来

地板
是袁啊 发表于 2021-11-4 23:09:05
qianchen 发表于 2021-11-4 20:44
把数据和预期结果一部分用dataex贴出来
谢谢提醒
  1. * Example generated by -dataex-. For more info, type help dataex
  2. clear
  3. input double(a a2 b b2 c c2 d d2)
  4.         . .         . .         .  .         . .
  5. 100551552 3         . .         .  .         . .
  6.         . .         . . 211584571  2 103465601 0
  7.         . .         . .         .  .         . .
  8.         . .         . . 110020108 12         . .
  9.         . .         . . 110026103 13         . .
  10.         . .         . . 110047103 15         . .
  11.         . . 110051521 5         .  .         . .
  12.         . .         . .         .  .         . .
  13.         . .         . .         .  .         . .
  14.         . .         . .         .  .         . .
  15.         . .         . . 110124401  7         . .
  16.         . . 115395552 2         .  .         . .
  17.         . . 115961502 6         .  .         . .
  18.         . .         . .         .  .         . .
  19.         . .         . . 120001103 14 120001401 7
  20.         . .         . . 120012103 12         . .
  21.         . .         . . 120024105 11         . .
  22.         . .         . . 120029103 10         . .
  23.         . . 120031571 2         .  .         . .
  24. end
  25. label values a pid_a_1
  26. label values a2 age
  27. label values b2 age
  28. label values c2 age
  29. label values d2 age
  30. label values b pid_a_2
  31. label values c pid_a_3
  32. label values d pid_a_4
复制代码

7
qianchen 发表于 2021-11-5 14:13:09
clear
input double(a a2 b b2 c c2 d d2 x y)
        . .         . .         .  .         . .         .  .
100551552 3         . .         .  .         . . 100551552  3
        . .         . . 211584571  2 103465601 0 103465601  2
        . .         . .         .  .         . .         .  .
        . .         . . 110020108 12         . . 110020108 12
        . .         . . 110026103 13         . . 110026103 13
        . .         . . 110047103 15         . . 110047103 15
        . . 110051521 5         .  .         . . 110051521  5
        . .         . .         .  .         . .         .  .
        . .         . .         .  .         . .         .  .
        . .         . .         .  .         . .         .  .
        . .         . . 110124401  7         . . 110124401  7
        . . 115395552 2         .  .         . . 115395552  2
        . . 115961502 6         .  .         . . 115961502  6
        . .         . .         .  .         . .         .  .
        . .         . . 120001103 14 120001401 7 120001401 14
        . .         . . 120012103 12         . . 120012103 12
        . .         . . 120024105 11         . . 120024105 11
        . .         . . 120029103 10         . . 120029103 10
        . . 120031571 2         .  .         . . 120031571  2
end
abcd变成x  a2 b2 c2 d2变成y? 什么叫原位置相同数据变缺失?

8
是袁啊 发表于 2021-11-5 23:12:51
cw666 发表于 2021-11-5 13:42
要把原位置变缺失值的话,试试这样
捕获.PNG
谢谢您。但想问一下,为什么总是无效命令啊...

捕获.PNG (6.06 KB)

捕获.PNG

9
是袁啊 发表于 2021-11-5 23:15:10
qianchen 发表于 2021-11-5 14:13
clear
input double(a a2 b b2 c c2 d d2 x y)
        . .         . .         .  .         . .      ...
数据移动到前面,原来位置就没有数据了。举例来讲,a为缺失值,b有数据,所以b的数据移动到a处,同时b变为缺失值。

10
cw666 发表于 2021-11-7 11:21:01
是袁啊 发表于 2021-11-5 23:12
谢谢您。但想问一下,为什么总是无效命令啊...
不知道你哪个版本stata  我这边运行是没问题的

d851e11218315b0d629060b3cf91e0a.png (16.35 KB)

d851e11218315b0d629060b3cf91e0a.png

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

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