Stata 16 - 使用 if 语句创建标量变量

Stata 16 - create scalar variable using if statement

我正在使用 Stata 16。我有 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 的回答给出了更好的解决方案。该答案仅关注代码“不起作用”的可能原因以及对样式的一些评论。