楼主: xiaomin_yan01
31362 16

请教大家,stata中 if 语句的执行问题 抓狂! [推广有奖]

  • 0关注
  • 0粉丝

高中生

87%

还不是VIP/贵宾

-

威望
0
论坛币
359 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
640 点
帖子
25
精华
0
在线时间
37 小时
注册时间
2009-9-11
最后登录
2011-7-7

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请大家看这段代码,我很困惑为什么执行的时候并没有按照语句的动作实现结果:问题是,当d1==0时 我确实发现有d3a=.的数据没有被替换为0.但是程序也不报错,说明我的语法上应该没有问题啊~~~~很无奈,很迷茫。。。现在做项目赶时间,我很着急,希望高手指教,拜谢!
我查看过帮助,stata是支持嵌套语句的。。。。迷茫啊
PS:我用STATA/SE11 STATA/SE10,都是这样,应该和版本没太大关系吧

if d1==0{             /*如果d1=0,这个家庭无此项收入*/
gen gardhhdinc=0
}
else{
replace d3a=0 if d3a==. | d3a<0
replace d3b=0 if d3b==. | d3b<0
replace d3c=0 if d3c==. | d3c<0
replace d5=0 if d5==. | d5<0
replace d6=0 if d6==. | d6<0
replace d7=0 if d7==. | d7<0
gen wktime0=d3b*d3c*4*d3a
sort hhid00
by hhid00:egen totlwktime0=sum(wktime0)
if totlwktime0==0{
gen idivgardhhdinc=0
}
else{
gen timeprob0=wktime0/totlwktime0
gen gardhhdinc=(d5-d7)+d6*12
gen idivgardhhdinc=timeprob0*gardhhdinc
}
}
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata replace place else 请教 Stata 语句 抓狂

回帖推荐

sungmoo 发表于15楼  查看完整内容

stata命令中加入if选项(而非if{})会对所有满足条件的行进行一并操作,不需要循环。 stata命令中加入in选项,会对指定行进行一并操作,也不需要循环。 若硬对每行循环,可使用 while 条件式{ …… } 其中,结合"in 行号"选项对指定行操作。
沙发
sungmoo 发表于 2010-3-11 17:39:35 |只看作者 |坛友微信交流群
xiaomin_yan01 发表于 2010-3-11 17:31
if d1==0{             /*如果d1=0,这个家庭无此项收入*/
gen gardhhdinc=0
}
注意:这里的命令只对d1的第一个观测值进行判断。
已有 1 人评分论坛币 收起 理由
dxystata + 10 好的意见建议

总评分: 论坛币 + 10   查看全部评分

使用道具

藤椅
sungmoo 发表于 2010-3-11 17:47:53 |只看作者 |坛友微信交流群
xiaomin_yan01 发表于 2010-3-11 17:31 请大家看这段代码,我很困惑为什么执行的时候并没有按照语句的动作实现结果:问题是,当d1==0时 我确实发现有d3a=.的数据没有被替换为0.
replace d3a=0 if d3a==. | d3a<0
replace d3b=0 if d3b==. | d3b<0
replace d3c=0 if d3c==. | d3c<0
replace d5=0 if d5==. | d5<0
replace d6=0 if d6==. | d6<0
replace d7=0 if d7==. | d7<0
*这几步想要如下结果?

foreach v of var d3b d3c d5 d6 d7{
recode `v' (min/0 .=0) if d1!=0
}

使用道具

板凳
xiaomin_yan01 发表于 2010-3-12 20:11:16 |只看作者 |坛友微信交流群
谢谢版主的回复!对,我就是要实现这个功能,我的代码问题出在哪啊?

使用道具

报纸
xiaomin_yan01 发表于 2010-3-13 15:05:01 |只看作者 |坛友微信交流群
为啥没人回复啊??抓狂啊:-C
好心人帮帮忙啊

使用道具

地板
sungmoo 发表于 2010-3-13 15:11:45 |只看作者 |坛友微信交流群
xiaomin_yan01 发表于 2010-3-12 20:11 我的代码问题出在哪啊?
前面不是说明问题所在了吗?

使用道具

7
xiaomin_yan01 发表于 2010-3-13 22:32:53 |只看作者 |坛友微信交流群
亲爱的版主,怪我没什么天份~~你说的我还没醒悟过来啊?请你可不可以说的明白点?真的不好意思 我刚接触stata一个多月,也是边做项目边学的,所以麻烦你了!!感激啊! 6# sungmoo

使用道具

8
sungmoo 发表于 2010-3-13 23:20:06 |只看作者 |坛友微信交流群
xiaomin_yan01 发表于 2010-3-11 17:31
if d1==0{          /*如果d1=0,这个家庭无此项收入*/
gen gardhhdinc=0
}
若只是这样列出变量d1,则只是判断d1的第一个观测值是否符合条件。

使用道具

9
xiaomin_yan01 发表于 2010-3-14 15:01:38 |只看作者 |坛友微信交流群
是这样的,变量(每一列)b1只是样本的一个变量指标而已,每个样本都有好几个变量指标。我是想对每个样本(每一行)都执行这一系列的操作。我不明白您说的,变量b1的第一个观测值是什么意思?是只对第一个样本(第一行)的b1值进行操作嘛?然后就不执行了? 8# sungmoo

使用道具

10
sungmoo 发表于 2010-3-14 16:43:55 |只看作者 |坛友微信交流群
xiaomin_yan01 发表于 2010-3-14 15:01 是这样的,变量(每一列)b1只是样本的一个变量指标而已,每个样本都有好几个变量指标。我是想对每个样本(每一行)都执行这一系列的操作。我不明白您说的,变量b1的第一个观测值是什么意思?是只对第一个样本(第一行)的b1值进行操作嘛?然后就不执行了? 8# sungmoo
简单说,第一步中的if不是循环语句。

使用道具

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

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

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

GMT+8, 2024-5-21 16:52