楼主: hxqlingguang
5333 9

[数据管理求助] stata 如何根据其他变量的取值范围生成新的变量 [推广有奖]

  • 0关注
  • 0粉丝

博士生

1%

还不是VIP/贵宾

-

威望
0
论坛币
114 个
通用积分
2.8075
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
635 点
帖子
45
精华
0
在线时间
384 小时
注册时间
2011-9-20
最后登录
2023-12-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下边的命令哪里出错了?Y1值只有6和7 ,1,2,3,4,5取值全被覆盖了。
gen  Y1=.
replace Y1=1  if  Y <= p10
replace Y1=2  if  p10 < Y <= p20
replace Y1=3  if  p20 < Y <= p40
replace Y1=4  if  p40 < Y <= p60
replace Y1=5  if  p60 < Y <= p80
replace Y1=6  if  p80 < Y < =p90
replace Y1=7  if  Y > p90

  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(Y p10 p20 p40 p60 p80 p90)
  4. 200000 26000 36000 50000 80000 120000 200000
  5. 20000 26000 36000 50000 80000 120000 200000
  6. 40000 26000 36000 50000 80000 120000 200000
  7. 30000 26000 36000 50000 80000 120000 200000
  8. 100000 26000 36000 50000 80000 120000 200000
  9. 300000 26000 36000 50000 80000 120000 200000
  10. 96000 26000 36000 50000 80000 120000 200000
  11. 16000 26000 36000 50000 80000 120000 200000
  12. 50000 26000 36000 50000 80000 120000 200000
  13. 60000 26000 36000 50000 80000 120000 200000
  14. 50000 26000 36000 50000 80000 120000 200000
  15. 100000 26000 36000 50000 80000 120000 200000
  16. 50000 26000 36000 50000 80000 120000 200000
  17. 40000 26000 36000 50000 80000 120000 200000
  18. 90000 26000 36000 50000 80000 120000 200000
  19. end
复制代码

二维码

扫码加我 拉你入群

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

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

关键词:Stata tata generated generate install

沙发
黃河泉 在职认证  发表于 2021-6-19 10:46:58 |只看作者 |坛友微信交流群
应该类似
  1. replace Y1=2  if  p10 < Y & Y <= p20
  2. replace Y1=3  if  p20 < Y & Y <= p40
复制代码

使用道具

藤椅
hxqlingguang 发表于 2021-6-19 16:55:07 |只看作者 |坛友微信交流群
黃河泉 发表于 2021-6-19 10:46
应该类似
貌似不行,出现“2  if  p10 invalid name”

使用道具

板凳
黃河泉 在职认证  发表于 2021-6-19 17:06:14 |只看作者 |坛友微信交流群
hxqlingguang 发表于 2021-6-19 16:55
貌似不行,出现“2  if  p10 invalid name”
不会吧,底下的 code 是可以的!
  1. gen Y1=.
  2. replace Y1=1  if  Y <= p10
  3. replace Y1=2  if  p10 < Y & Y <= p20
  4. replace Y1=3  if  p20 < Y & Y <= p40
  5. replace Y1=4  if  p40 < Y & Y <= p60
  6. replace Y1=5  if  p60 < Y & Y <= p80
  7. replace Y1=6  if  p80 < Y & Y < =p90
  8. replace Y1=7  if  Y > p90
复制代码

使用道具

报纸
hxqlingguang 发表于 2021-6-19 17:14:05 |只看作者 |坛友微信交流群
黃河泉 发表于 2021-6-19 17:06
不会吧,底下的 code 是可以的!
“1  if  Y invalid name”的确出现了这个,不知道问题出在哪里。

使用道具

地板
hxqlingguang 发表于 2021-6-19 17:26:44 |只看作者 |坛友微信交流群
黃河泉 发表于 2021-6-19 17:06
不会吧,底下的 code 是可以的!
原来是不能有空隙
  1. gen Y1=.
  2. replace Y1=1 if  Y<=p10
  3. replace Y1=2 if  p10<Y& Y<=p20
  4. replace Y1=3 if  p20<Y& Y<=p40
  5. replace Y1=4 if  p40<Y& Y<=p60
  6. replace Y1=5 if  p60<Y& Y<=p80
  7. replace Y1=6 if  p80<Y& Y<=p90
  8. replace Y1=7 if  Y>p90
复制代码

使用道具

7
黃河泉 在职认证  发表于 2021-6-19 17:50:19 |只看作者 |坛友微信交流群
hxqlingguang 发表于 2021-6-19 17:26
原来是不能有空隙
1. 这跟空隙应该没关系吧?
2. Andrew Musau 有一精简建议:
  1. gen wanted=1
  2. foreach var of varlist p* {
  3.     replace wanted = wanted+1 if `var'<Y
  4. }
复制代码

使用道具

8
wdlbcj 学生认证  发表于 2021-6-19 18:01:38 |只看作者 |坛友微信交流群
hxqlingguang 发表于 2021-6-19 17:26
原来是不能有空隙
之前也发现了 黄老师给出的code编码方式好像和我们的不同,有时会无法正常执行。可能是输入法的原因

使用道具

9
黃河泉 在职认证  发表于 2021-6-19 18:03:50 |只看作者 |坛友微信交流群
wdlbcj 发表于 2021-6-19 18:01
之前也发现了 黄老师给出的code编码方式好像和我们的不同,有时会无法正常执行。可能是输入法的原因
请不要用
  1. 复制代码
复制代码
自己复制应该都可以 (通常我都自己试过可行的)!

使用道具

10
黃河泉 在职认证  发表于 2021-6-20 08:01:31 |只看作者 |坛友微信交流群
此外,有其他人之建议,也很有趣:
  1. // Nick Cox
  2. gen wanted1 = 1
  3. foreach v in 10 20 40 60 80 90 {
  4.     replace wanted1 = wanted1 + 1 if Y > p`v'
  5. }

  6. // Romalpa Akzo
  7. gen wanted2 = 1 + (Y>p10) + (Y>p20) + (Y>p40) + (Y>p60) + (Y>p80) + (Y>p90)
复制代码

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-21 17:43