string Vergleich gegen Faktoren in Stata

ngenommen, ich habe einFaktor Variable mit den Bezeichnungen "a" "b" und "c" und möchten sehen, welche Beobachtungen die Bezeichnung "b" haben. Stata weigert sich, @ zu analysier

gen isb = myfactor == "b"

Sicher, es gibt buchstäblich eine "Typinkongruenz", da mein Faktor als Ganzzahl codiert ist und daher nicht mit der Zeichenfolge "b" verglichen werden kann. Es würde jedoch Stata nicht töten, (i) die offensichtliche Analyse durchzuführen oder (ii) eine Übersetzerfunktion bereitzustellen, damit ich den Vergleich als @ schreiben kanlabel(myfactor) == "b". @ Verwenddecode zum (erneuten) Erstellen einer Zeichenfolgenvariablen wird der Zweck des Codierens aufgehoben, der darin besteht, Platz zu sparen und Berechnungen effizienter zu gestalten, oder?

Ich hatte nicht wirklich damit gerechnet, dass der obige Vergleich funktioniert, aber ich dachte zumindest, dass es einen ein- oder zweizeiligen Ansatz geben würde. Folgendes habe ich bisher gefunden. Es gibt eine nette Makrofunktion ("extended"), die die andere Richtung abbildet (von einer Ganzzahl zu einer Beschriftung, siehe unten als @local labi: label ...). Hier ist die Lösung dafür:

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

Der zweite Schritt ist es, was mich ärgert, aber ich bin sicher, dass es auch eine schnellere und idiomatischere Art gibt, den ersten Schritt durchzuführen. Kann ich zum Beispiel die Länge des Beschriftungsvektors erfassen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage