如何解决Stata 16-使用if语句创建标量变量
我正在使用Stata16。我有2个变量:totexp
(医疗总支出)和suppins
(如果有补充私人保险,则为= 1)并回答:
“要求:拥有补充私人保险的个人的平均总医疗支出要高于没有补充私人保险的个人。对或错。”
所以我的代码是:
mean totexp if suppins==0
scalar no_ins = r(mean)
mean totexp if suppins==1
egen yes_ins = mean(totexp) if suppins==1
if yes_ins > no_ins {
display "True"
}
else {
display "False"
}
但这不起作用。
解决方法
mean
有一个over
选项,为什么不使用它呢?
sysuse auto
mean price,over(foreign)
或者如果您想进行正式测试:
ttest price,by(foreign)
,
这里是您的代码为何“不起作用”的猜测(在什么意义上?)
mean totexp if suppins==0
scalar no_ins = r(mean)
这可能是公平的技术
mean totexp if suppins==1
egen yes_ins = mean(totexp) if suppins==1
为什么要以不同的方式处理这种情况?
if yes_ins > no_ins {
display "True"
}
else {
display "False"
}
请注意,您可以将此范围缩小到一行:
display cond(yes_ins > no_ins,"True","False")
但是,出于一个微妙的原因,该代码仍然存在风险。 yes_ins
是一个变量,如果观察到的是suppins == 1
,则填充一个平均值,否则填充。当被要求display
变量时,Stata在第一个观测值中显示值。 (这样想:除非在数据集中只有一个观察值,否则它不可能在一行上显示整个变量。)这就像您写
if yes_ins[1] > no_ins
如果缺少yes_ins[1]
,您很可能会得到错误的答案。
@Wouter Wakker的答案提供了更好的解决方案。这个答案只是针对代码“不起作用”的可能原因以及对样式的一些注释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。