我正在处理一组代表不同年份调查的dta
个文件。
方便地,每年对country
变量使用不同的值,因此我尝试设置每年匹配的country
值标签。我在比较价值标签方面遇到了麻烦。
到目前为止,我已经提出了以下代码:
replace country=1 if countryO=="Japan"
replace country=2 if countryO=="South Korea" | countryO=="Korea"
replace country=3 if countryO=="China"
replace country=4 if countryO=="Malaysia"
然而,这并不起作用,因为" Japan"是值标签,而不是实际值。
如何告诉Stata我正在比较价值标签?
答案 0 :(得分:10)
尝试
replace country=1 if countryO=="Japan":country0valuelabel
replace country=2 if inlist(countryO,"South Korea":country0valuelabel,"Korea":country0valuelabel)
您必须将country0valuelabel
替换为数据中相应的值标签名称。您可以通过查看describe country0
输出中的倒数第二列来查找其名称。
答案 1 :(得分:2)
补充@ Dimitriy的回答:
clear all
set more off
sysuse auto
keep foreign weight
describe foreign
label list origin
replace weight = . if foreign == 0
list in 1/15
list in 1/15, nolabel
describe
显示与变量关联的值标签。 label list
可以显示特定值标签的内容。
答案 2 :(得分:0)
我知道几年后我会对此作出回应,但是我想提供一个解决方案,该解决方案适用于多个变量,以防万一有人遇到这种情况。
我的任务很相似,除了我必须recode
对缺失值类型(。,。r)进行“拒绝”响应的每个变量都是数字值(8、9、99等)。 ,.b等)。所有变量均已根据值标签“拒绝”编码了不同的值,例如有些变量将“拒绝”编码为9,而其他变量将其编码为99或8。
版本信息 Stata 15.1
代码
foreach v of varlist * {
if `"`: val label `v''"' == "yndkr" {
recode `v' (9 = .r)
}
else if `"`: val label `v''"' == "bw3" {
recode `v' (9 = .r)
}
else if `"`: val label `v''"' == "def_some" {
recode `v' (9 = .r)
}
else if `"`: val label `v''"' == "difficulty5" {
recode `v' (9 = .r)
}
}
您可以根据需要继续添加任意数量的else if
命令。我只展示了整个循环的一部分,但是我希望这可以演示需要做的事情。如果需要查找值标签的名称,请使用命令labelbook
,它将为您全部打印。