楼主: Yullan
3139 4

[面板数据求助] 请问怎样按条件在stata中相加数据 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

硕士生

13%

还不是VIP/贵宾

-

威望
0
论坛币
580 个
通用积分
0.9000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1931 点
帖子
84
精华
0
在线时间
151 小时
注册时间
2021-3-22
最后登录
2024-2-21

楼主
Yullan 发表于 2021-7-19 17:09:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
input double(fq6 fq6_est fr2 fr2_est)
260   -8   -8 -8
  30   -8   -8 -8
  10   -8   -8 -8
  32   -8   -8 -8
320   -8  250 -8
120   -8   -8 -8
   4   -8   -8 -8
  -1 37.5   60 -8
   6   -8   -8 -8
  90   -8   -8 -8
110   -8   -1 50
   8   -8   -8 -8
  50   -8   -8 -8
1000   -8   -8 -8
  -1   50   -8 -8
  60   -8   -8 -8
200   -8   -8 -8
500   -8   -1 50
204   -8   -8 -8
240   -8   -8 -8
400   -8  300 -8
400   -8   -8 -8
1200   -8   60 -8
  -1   -8   -8 -8
  -1   50   -8 -8
200   -8   -8 -8
200   -8   -8 -8
1300   -8   -8 -8
200   -8   -8 -8
  -1 17.5   -8 -8
  90   -8   -1 50
300   -8   -8 -8
  -1   50   -8 -8
800   -8   -8 -8
150   -8   -8 -8
  -1   -8   -8 -8
300   -8  100 -8
400   -8  800 -8
  -1   50   -1 50
800   -8 1700 -8
  -1   50   -8 -8
350   -8   -8 -8
600   -8  200 -8
350   -8  350 -8
500   -8   -8 -8
200   -8   -8 -8
430   -8   -8 -8
200   -8  100 -8
  -1   50   -8 -8
  -1   50  300 -8
end
label values fq6 fq6
label def fq6 -1 "不知道", modify
label values fq6_est fq6_est
label def fq6_est -8 "不适用", modify
label values fr2 fr2
label def fr2 -8 "不适用", modify
label def fr2 -1 "不知道", modify
label values fr2_est fr2_est
label def fr2_est -8 "不适用", modify
[/CODE]
在数据里面,fq6,fq6_est,fr2,fr2_est四个进行相加,“-8”代表不适用,“-1”代表不知道。现在我希望如果将四列数据相加,如果四列全是“-8”,则结果输出为“不适用”;若四列全是“-1”,则输出结果为“不知道”;若四列同时含有“-8”、“-1”,并且只有“-8”、“-1”时,则输出为“不适用”;但倘若任一一列有正的数据,例如fq6是60,其它三列即使是“-8”“-1”,结果只输出为60。
非常感谢您的回答。

二维码

扫码加我 拉你入群

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

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

关键词:Stata tata modify values double

沙发
黃河泉 在职认证  发表于 2021-7-19 19:04:52
硬凑了一下 (抛转引玉),看看能否使用?
  1. foreach v of varlist fq6 fq6_est fr2 fr2_est {
  2.         decode `v', gen(`v'd)
  3. }       

  4. label drop fq6 fq6_est fr2 fr2_est
  5. mvdecode fq6 fq6_est fr2 fr2_est, mv(-1 -8)
  6. egen tem = rowtotal(fq6 fq6_est fr2 fr2_est)
  7. gen wanted = string(tem)

  8. replace wanted = "不适用" if tem == 0
  9. replace wanted = "不知道" if tem == 0 & fq6d == "不知道" & fq6_est == "不知道" & fr2  == "不知道" & fr2_est  == "不知道"
复制代码

藤椅
Yullan 发表于 2021-7-19 22:12:08
foreach v of varlist fq6 fq6_est fr2 fr2_est{                                             
        decode `v',gen(`v'd)
}  //创建字符串,不懂这一步
label drop fq6 fq6_est fr2 fr2_est
mvdecode fq6 fq6_est fr2 fr2_est, mv(-1 -8) //把-1~-8转换为缺失值
egen tem = rowtotal(fq6 fq6_est fr2 fr2_est) //跳过缺失值,将几者相加
gen wanted = string(tem) //定义为字符串形式
replace wanted = "不知道" if tem == 0 & fq6d == "不知道" & fq6_est == "不知道" & fr2  == "不知道" & fr2_est  == "不知道"
 type mismatch您好,我输入命令最后一步出不了结果,我没发现问题,不知道怎么解决。

我还有一个疑问。今天下午我查看数据,几万个中只有不到50个值为0,其它为缺失值、正数(>0)以及“不知道”“不适用”,因为“不知道”“不适用”的值标签都是负数(-1,-8),于是我定义小于0为“0”,replace fq6_est =0 if fq6_est<0 ;replace fq6=0 if fq6<0;replace fr2_est=0 if fr2_est<0;replace fr2=0 if fr2<0;egen houseasset_gross = rowtotal( fr2 fr2_est fq6 fq6_est );这些数相加只能为缺失值,0(含极少数原来就为0的数)和正数,最后我把“0”全部作为不适用(因为我认为这个数据指代的是房屋价值,如果为负数,那肯定不适用,这里我放弃了极少数房价为0的样本)。不知道处理stata数据是否可以这样做。非常感谢您下午的回复,我有点不太会描述问题,麻烦您了,谢谢您。

板凳
黃河泉 在职认证  发表于 2021-7-20 10:21:30
Yullan 发表于 2021-7-19 22:12
foreach v of varlist fq6 fq6_est fr2 fr2_est{                                             
        ...
我看不太懂你的问题 (尔后请用回覆)。

报纸
Yullan 发表于 2021-7-20 21:30:33
黃河泉 发表于 2021-7-20 10:21
我看不太懂你的问题 (尔后请用回覆)。
老师不好意思,感谢您的回复。我想我对自己想问的问题不够了解,我再回去好好思考一下我想问的。

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

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