Stata:将 if 与值标签一起使用

Stata: Using if with value labels

我在使用带有值标签的 if 时遇到了问题。

set obs 5
gen var1 = _n
label define l_var1 1 "cat1" 2 "cat1" 3 "cat2" 4 "cat3" 5 "cat3"
label val var1 l_var1
keep if var1=="cat3":l_var1
(4 observations deleted)

我预计要删除 3 条记录。我怎样才能做到这一点?

我正在使用 Stata 16.1。

"cat3":l_var1 不会查找 l_var1 中对应于 "cat3" 的所有值。它 returns 对应于字符串 "cat3".

的第一个值

所以 "cat3":l_var1 的计算结果为 4 所以 keep if var1=="cat3":l_var1 的计算结果为 keep if var1==4 因此只保留一个观察值。

请参阅下面显示此行为的代码。这不是您希望 "cat3":l_var1 的行为方式,但它就是这样。

set obs 5
gen var1 = _n
label define l_var1 1 "cat1" 2 "cat1" 3 "cat2"  5 "cat3" 4 "cat3"
label val var1 l_var1
gen var2 = "cat3":l_var1
gen var3 = 1 if var1=="cat3":l_var1

这回答了您的代码中发生的事情。下面的代码是解决您正在尝试做的事情的更好方法。

set obs 5
gen var1 = _n
label define l_var1 1 "cat1" 2 "cat1" 3 "cat2"  5 "cat3" 4 "cat3"
label val var1 l_var1

decode var1, generate(var_str)
keep if var_str == "cat3"