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