在if命令中使用值标签

时间:2014-03-31 17:08:17

标签: stata

我正在处理一组代表不同年份调查的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我正在比较价值标签?

3 个答案:

答案 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,它将为您全部打印。