сравнение строк с факторами в Stata

Предположим, у меня естьфакторная переменная с метками "a", "b" и "c" и хотите увидеть, какие наблюдения имеют метку "b". Стата отказывается разбирать

gen isb = myfactor == "b"

Конечно, существует буквально «несоответствие типов», так как мой фактор закодирован как целое число и поэтому не может сравниваться со строкой «b». Тем не менее, это не убило бы Stata, чтобы (i) выполнить очевидный анализ или (ii) предоставить функцию переводчика, чтобы я мог написать сравнение какlabel(myfactor) == "b", С помощьюdecode (пере) создание строковой переменной отрицает цель кодирования, которая заключается в экономии места и повышении эффективности вычислений, верно?

Я действительно не ожидал, что приведенное выше сравнение сработает, но я по крайней мере подумал, что будет подход с одной или двумя строками. Вот что я нашел до сих пор. Есть хорошая макро-функция («расширенная»), которая отображает другой путь (от целого числа до метки, как показано ниже какlocal labi: label ...). Вот решение, использующее его:

// sample data 

clear
input str5 mystr int mynum
a 5
b 5
b 6
c 4
end

encode mystr, gen(myfactor)

// first, how many groups are there?

by myfactor, sort: gen ng = _n == 1
replace ng = sum(ng)
scalar ng = ng[_N]
drop ng

// now, which code corresponds to "b"?

forvalues i = 1/`=ng'{
    local labi: label myfactor `i'
    if "b" == "`labi'" {
        scalar bcode = `i'
        break
    }
}

di bcode

Второй шаг - это то, что раздражает меня, но я уверен, что есть и более быстрый, более идиоматический способ выполнения первого шага. Можно ли, например, получить длину вектора метки?

Ответы на вопрос(1)

Ваш ответ на вопрос