修改值标签后如何保持观察匹配?

How to keep observations match after value label modified?

我正在用 Stata 做一些基本的数据处理。但是,在修改变量的值标签后,我陷入了如何使其他变量的观察保持匹配的问题。

例如,我有如下原始数据集:

   var1   var2   var3
    US    1000    15
  China    500    20
    UK     800    10

var1是字符串变量。我需要将其转换为数字。所以我输入

   encode var1, gen(country)    // where the new variable country is numeric

我希望在未来工作中使用的变量是 var2var3country

当新变量生成时,它会自动有一个值标签。具体来说,如果我在 country 列中单击 US,它会在该列顶部的单元格中显示 3。

   var1   var2   var3  country
    US    1000    15     US
  China    500    20   China
    UK     800    10     UK

到目前为止还不错。我的意思是对于每一行,观察结果都匹配。

然而,这个自动生成的值标签并不是我想要的。我需要的是让 1 代表英国,2 代表美国,3 代表中国。所以我修改了它:

     label define country 1 "UK" 2 "US" 3 "China", modify

如下所示,我得到了我想要的值标签。比如,点击中国给我 3。

     var1   var2   var3  country
      US    1000    15    China
    China    500    20     UK
      UK     800    10     US

但关键是,您可能已经注意到,国家/地区 的观察顺序是按字母顺序排列的。使得每个国家对应的 var2var3 的值是错误的。

这正是我无法通过的地方。由于我最终需要的列是 var2var3country,我想要每个国家及其相应的值 var2var3 以及自定义值标签。

我尝试了 sortorder 和几个命令,但 none 给了我结果。我不知道我应该使用什么命令,或者我之前的工作有问题。

使用 encodelabel() 选项是一种方法:

clear
set more off

input ///
str10 var1   var2   var3
  US      1000    15
  China    500    20
  UK       800    10
end

label define lblcountry 1 "UK" 2 "US" 3 "China"
encode var1, generate(country) label(lblcountry)

list
list, nolabel

又见用户写的命令sencodesuper-encode),可以做的更多:ssc describe sencode.