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"
我在使用带有值标签的 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"