comparación de cadenas contra factores en Stata

Supongamos que tengo unvariable de factor con las etiquetas "a" "b" y "c" y desea ver qué observaciones tienen una etiqueta de "b". Stata se niega a analizar

gen isb = myfactor == "b"

Claro, hay literalmente una "falta de coincidencia de tipos", ya que mi factor está codificado como un entero y, por lo tanto, no se puede comparar con la cadena "b". Sin embargo, no mataría a Stata para (i) realizar el análisis obvio o (ii) proporcionar una función de traductor para que pueda escribir la comparación comolabel(myfactor) == "b". Utilizandodecode (re) crear una variable de cadena anula el propósito de la codificación, que es ahorrar espacio y hacer que los cálculos sean más eficientes, ¿verdad?

Realmente no esperaba que la comparación anterior funcionara, pero al menos pensé que habría un enfoque de una o dos líneas. Esto es lo que he encontrado hasta ahora. Hay una buena función de macro ("extendida") que se asigna al otro lado (de un entero a una etiqueta, que se ve a continuación comolocal labi: label ...) Aquí está la solución usándolo:

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

El segundo paso es lo que me molesta, pero estoy seguro de que también hay una forma más rápida y más idiota de realizar el primer paso. ¿Puedo tomar la longitud del vector de etiqueta, por ejemplo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta