Hilfe beim destring-Befehl!

Fragen zu Stata Syntax und Do-Files.

Hilfe beim destring-Befehl!

Beitragvon Friedi » Do 22. Aug 2013, 18:57

Hallo,

ich komme mit dem "destring"-Befehl derzeit nicht weit. Ich habe mehrere nichtnumerische Variablen in meinem Datensatz, die in numerische umgewandelt werden müssen. Dies sind alles Dummy-Variablen mit den Ausprägungen "True" bzw "False".
Ich möchte gerne wiefolgt umcodieren: True = 1 und False = 0

Ich konnte bisher nicht rausfinden, ob man mit dem encode oder dem destring-Befehl definieren kann, wie die Ausprägungen "benannt" werden sollen. Meines Wissens nach geschieht beim encode Befehl die Zuordnung alphabetisch und beginnend bei 1.

Da ich eine große Anzahl an Variablen habe, die jeweils mit den gleichen Ausprägungen angegeben sind (True bzw False), würde ich diese so umformen, dass auch in jeden Fall True = 1 ist und False =0 ist. Bei meinen bisherigen Versuchen bin ich daran gescheitert, und mal wurde True =1 umcodiert und mal False = 1.

Verwende ich den Befehl "destring, replace" gibt STATA mir zwar keine Fehlermeldung, aber dennoch wird nichts "replaced".

Vielleicht steh ich grade auch nur aufm Schlauch. Aber kann mir jemand vielleicht bei meinem Problem helfen??
Vielen Dank schon einmal im Voraus!
Friedi
 
Beiträge: 5
Registriert: Do 22. Aug 2013, 18:48
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon daniel » Do 22. Aug 2013, 20:55

Es gibt diverse Möglichkeiten das zu lösen.

Code: Alles auswählen
clear
inp str5 strvar
"True"
"False"
end

l

la de numlbl 0 "False" 1 "True"
encode strvar ,g(numvar) l(numlbl)

l
l ,nol


oder

Code: Alles auswählen
clear
inp str5 strvar
"True"
"False"
end

l

replace strvar = cond(strvar == "True", "1", "0")
destring strvar ,replace
l


oder ...

Bei mehreren Variablen würde ich das Ganze in einen loop (-help foreach-) einbauen.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon Friedi » Fr 23. Aug 2013, 17:05

Vielen vielen Dank für deine Antwort! Dies hat bei der Anwendung bei einzelnen Variablen schon einmal hervorragend geklaptt und mir sehr weitergeholfen.

Nun komme ich leider beim loop nicht weiter.
Folgendes habe ich versucht:

foreach i of varlist F00101-F05702 {
2. replace i = cond(i == "True", "1", "0")
3. destring i ,replace
4. }

Jedoch erhalte ich die Fehlermeldung 109 "type mismatch". Woran liegt das?
Über eine weitere Rückmeldung würde ich mich sehr freuen!
Viele Grüße!
Friedi
 
Beiträge: 5
Registriert: Do 22. Aug 2013, 18:48
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon daniel » Fr 23. Aug 2013, 17:50

Du greifst nicht auf das local i zu. Innerhalb des loops musst Du um das i Anführungszeichen setzen, die ich auf diesem Handy leider nicht finden kann, um Dir exakt zu zeigeb, wie das aussehen muss. Das linke Anführungszeichen findest Du auf der deutschrn Tastatur, indem Du shift und ß drückst. Das ist ein dead key, der das Zeichen erst erzeigt, wenn Du ein Leerzeichen nachstellst. Das rechte Anführungszeichen ist das ' (findest Du mit shift und #).

Du erkennst, dass Du es richtig gemacht hast, wenn das i nicht in schwarz, sondern in hellblau im dofile editor angezeigt wird.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon Friedi » Fr 23. Aug 2013, 18:06

Danke für deine schnelle Rückmeldung!

Ich habe die Anführungszeichen beim i ergänzt und es erscheint nun auch hellblau.

foreach i of varlist F00101-F05702 {
2. replace `i' = cond(`i' == "True", "1", "0")
3. destring `i' ,replace
4. }

Und dennoch erhalte ich weiterhin die Fehlermeldung "type mismatch".
Habe ich noch einen weiteren Fehler eingebaut? Ich kann ihn irgendwie nicht finden.
Friedi
 
Beiträge: 5
Registriert: Do 22. Aug 2013, 18:48
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon daniel » Fr 23. Aug 2013, 19:10

Bist Du sicher, dass alle Variablen der liste F00101-F05702 string variablen sind. Die Fehlermeldung deutet darauf hin, dass dies nicht der Fall ist.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon Friedi » Di 27. Aug 2013, 15:00

Hallo,

ja, das war wohl der Fehler. Wende ich die Schleife nur auf einen Teil der Variablenliste an, klappts ohne Problme. Wie kann ich dieses Problem denn umgehen? Kann man nur eine Liste angeben mit von bis!? Oder habe ich auch die Möglichkeit einzelne Variablen mit einzuschließen? Mit "&" klappt es leider nicht.

Ich meine beispielsweise:
foreach i of varlist F00202 & F01601 & F01602 {
replace `i' = cond(`i' == "True", "1", "0")
destring `i' ,replace
}

Fehlermeldung: & invalid name

Liebe Grüße und Danke!!!
Friedi
 
Beiträge: 5
Registriert: Do 22. Aug 2013, 18:48
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon daniel » Di 27. Aug 2013, 16:08

Naja , schau mal unter -help varlist- nach. Du solltest das & natürlich rauslassen. Wenn Du allerdings nur einzelne Variablen angibst, sollte der loop schlicht

Code: Alles auswählen
foreach v in var1 var2 var3 {
}


lauten. Die Konstruktion -of varlist- ist dann nämlich überflüssig und langsam.

Du kannst das Ganze aber auch automatisieren und nummerische Variablen überspringen. Ein Beispiel wäre

Code: Alles auswählen
foreach v of varlist F00101-F05702 {
    cap conf str v `v'
    if (_rc) continue
    replace `i' = cond(`i' == "True", "1", "0")
    destring `i' ,replace
}


Das -ds- command kann ebenfalls nützlich sein.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Hilfe beim destring-Befehl!

Beitragvon Friedi » Mi 18. Sep 2013, 15:13

So, ich bin nun endlich weitergekommen! Vielen herzlichen Dank für die Hilfe!!
Friedi
 
Beiträge: 5
Registriert: Do 22. Aug 2013, 18:48
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste