Идентифицировать наблюдения без меток значения - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь определить наблюдения в моем наборе данных, которые имеют переменные с наблюдениями, которые не имеют соответствующей метки значения.

Например, если у меня есть эта переменная var:

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

Как я могу решить вышеупомянутую проблему?

Я не собираюсь менять метки значений, которые я могу сделать с помощью команды label define.

1 Ответ

0 голосов
/ 16 ноября 2018

Это действительно зависит от того, что вы подразумеваете под «идентификацией».

Рассмотрим следующий пример с игрушкой:

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 |
     +-----------------------+

Если вы просто хотите отобразить значения для нескольких переменных, самый простой способ должен установить и использовать команду , предоставленную сообществом labellacking (Ник Кокс, Роберт Пикард) из SSC:

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 |
     +------+
...