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

Stata 16-使用if语句创建标量变量,stata,Stata,我用的是Stata 16。我有两个变量:totexp(总医疗支出)和支持项(=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 > n

我用的是Stata 16。我有两个变量:
totexp
(总医疗支出)和
支持项
(=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"
}

但是它不起作用。

意味着
有一个
over
选项,为什么不使用它呢

sysuse auto
mean price, over(foreign)
或者,如果您想进行正式测试:

ttest price, by(foreign)

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\u ins
是一个变量,如果观测值为
suppins==1
,则填充平均值,否则填充缺失值。当要求显示变量时,Stata显示第一次观察的值。(这样想:它不可能在一行上显示整个变量,除非数据集中只有一个观测值)

if yes_ins[1] > no_ins 
如果
yes\u-ins[1]
缺失,您很可能会得到错误的答案


@Wouter-Wakker的答案给出了更好的解决方案。这个答案只关注代码“不工作”的一个可能原因,以及一些关于风格的评论。

这里是对代码“不工作”原因的猜测[在什么意义上?]

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\u ins
是一个变量,如果观测值为
suppins==1
,则填充平均值,否则填充缺失值。当要求显示变量时,Stata显示第一次观察的值。(这样想:它不可能在一行上显示整个变量,除非数据集中只有一个观测值)

if yes_ins[1] > no_ins 
如果
yes\u-ins[1]
缺失,您很可能会得到错误的答案

@Wouter-Wakker的答案给出了更好的解决方案。这个答案只关注代码“不工作”的一个可能原因,以及一些关于风格的评论