识别没有值标签的观察值

时间:2018-11-16 14:09:39

标签: stata

我正在尝试识别数据集中的观测值 观测值没有相应值标签的变量。

例如,如果我有此变量var

1. Category 1
2. 2
3. Category 3
4. Category 4
5. Category 5
6. 6

如何解决上述问题?

我不希望更改使用label define命令可以执行的值标签。

1 个答案:

答案 0 :(得分:3)

这实际上取决于您“识别”的意思。

考虑以下玩具示例:

clear
set obs 6

generate var1 = _n
generate var2 = _n
generate var3 = _n

label define var1label 1 "Cat 1" 3 "Cat 3" 4 "Cat 4" 5 "Cat 5"
label define var2label 2 "Cat 2" 4 "Cat 4" 6 "Cat 6"
label define var3label 1 "Cat 1" 2 "Cat 2" 3 "Cat 3" 4 "Cat 4" 5 "Cat 5" 6 "Cat 6"

label values var1 var1label
label values var2 var2label
label values var3 var3label

list, separator(0)

     +-----------------------+
     |  var1    var2    var3 |
     |-----------------------|
  1. | Cat 1       1   Cat 1 |
  2. |     2   Cat 2   Cat 2 |
  3. | Cat 3       3   Cat 3 |
  4. | Cat 4   Cat 4   Cat 4 |
  5. | Cat 5       5   Cat 5 |
  6. |     6   Cat 6   Cat 6 |
     +-----------------------+

如果您只想显示几个变量的值,最简单的方法 是要安装并使用SSC中的社区贡献命令labellacking(Nick Cox,Robert Picard):

ssc install labellacking

然后,您可以简单地执行以下操作:

labellacking var*

var1   2 6
var2   1 3 5

现在,如果需要标记以供以后使用,则必须 循环所有相关变量,并使用宏提取信息 扩展功能:

ds var*

foreach var in `r(varlist)' {
    generate `var'label = 0
    local varlabel : value label `var'
    if "`varlabel'" != "" {
        levelsof `var', local(foo)
        foreach val of local foo {
            local labelval : label (`var') `val', strict
            if "`labelval'" == "" {
                replace `var'label = 1 if `var' == `val'
            }
        }
    }
}

list, abbreviate(10) separator(0)

     +-----------------------------------------------------------+
     |  var1    var2    var3   var1label   var2label   var3label |
     |-----------------------------------------------------------|
  1. | Cat 1       1   Cat 1           0           1           0 |
  2. |     2   Cat 2   Cat 2           1           0           0 |
  3. | Cat 3       3   Cat 3           0           1           0 |
  4. | Cat 4   Cat 4   Cat 4           0           0           0 |
  5. | Cat 5       5   Cat 5           0           1           0 |
  6. |     6   Cat 6   Cat 6           1           0           0 |
     +-----------------------------------------------------------+

list var1 if var1label == 1

     +------+
     | var1 |
     |------|
  2. |    2 |
  6. |    6 |
     +------+

list var2 if var2label == 1

     +------+
     | var2 |
     |------|
  1. |    1 |
  3. |    3 |
  5. |    5 |
     +------+