2016-05-20 5 views
-2

To populate missing data with a fixed range of valuesWie bevölkern Werte für String-Variable in einer Spalte basierend auf feste Kriterien fehlen

Ich mag wäre zu prüfen, wie Spalte füllen aktype mit einem Wertebereich (den Bereich der Werte für den gleichen pidlink immer fest sind bei 11 Arten von Werten, die unten aufgeführt sind) für die Zellen mit fehlenden Werten. Ich habe ungefähr 17.000+ Beobachtungen, die fehlen.

Der Wertebereich sind wie folgt: A B C D E G H I J K L

I den folgenden Befehl versucht, aber es funktioniert nicht: -

foreach x of varlist aktype=1/11 { 
replace aktype = "A" in 1 if aktype=="" 
replace aktype = "B" in 2 if aktype=="" 
replace aktype = "C" in 3 if aktype=="" 
replace aktype = "D" in 4 if aktype=="" 
replace aktype = "E" in 5 if aktype=="" 
replace aktype = "G" in 6 if aktype=="" 
replace aktype = "H" in 7 if aktype=="" 
replace aktype = "I" in 8 if aktype=="" 
replace aktype = "J" in 9 if aktype=="" 
replace aktype = "K" in 10 if aktype=="" 
replace aktype = "L" in 11 if aktype=="" 
    } 

Würde es zu schätzen wissen, wenn Sie über den richtigen Befehl beraten könnten. Danke vielmals!

Antwort

0

Ich würde eine Variable AK generieren, die Buchstaben A-K in den Positionen 1-11 (und 12-22, und 23-33, und so weiter) hat. Das Ersetzen fehlender Werte durch den Wert dieser Variablen AK.

* generate data 
clear 
set obs 20 
generate aktype = "" 
replace aktype = "foo" in 1/1 
replace aktype = "bar" in 10/12 

* generate variable with letters A-K 
generate AK = char(65 + mod(_n - 1, 11)) 

* fill missing values 
replace aktype = AK if missing(aktype) 
list 

Dies ergibt Folgendes.

. list 

    +-------------+ 
    | aktype AK | 
    |-------------| 
    1. | foo A | 
    2. |  B B | 
    3. |  C C | 
    4. |  D D | 
    5. |  E E | 
    |-------------| 
+0

Vielen Dank! Ich werde das ausprobieren. – TSY

0

Das erste adressiert den Kommentar "es funktioniert nicht".

Generell in dieser Art von Forum sollten Sie immer spezifisch sein und sagen genau was passiert, nämlich wo der Code zusammenbricht und was das Ergebnis ist (z. B. welche Fehlermeldung erhalten Sie). Wenn nötig, fügen Sie hinzu, warum das nicht das ist, was gewünscht wird.

Insbesondere in diesem Fall Stata würde sich nicht weiter als

foreach x of varlist aktype=1/11 

, die illegal ist (wie auch unklar Stata Programmierer).

Sie können eine Schleife über varlist. In diesem Fall ist das Schleifen über eine einzelne Variable aktype zulässig. (Es ist in der Regel sinnlos, aber das ist Stil, nicht Syntax.) Das ist also legal:

foreach x of varlist aktype 

By the way, Sie definieren x als Schleife Argument, aber nie, um es in der Schleife beziehen. Das ist nicht illegal, aber es ist ungewöhnlich.

Sie können auch eine Schleife über eine Nummer, z.

foreach x of numlist 1/11 

obwohl

forval x = 1/11 

ist ein direkterer Weg, dies zu tun. All dies folgt aus den Syntaxdiagrammen für die betreffenden Befehle, wobei alles, was nicht ausdrücklich erlaubt ist, verboten ist.

Gelegentlich, wenn Sie benötigen einen varlist Schleife über und einem numlist Sie andere Syntax verwenden müssen, aber am besten, was auf die genaue Problem ist, hängt davon ab.

Nun zu der Frage: Ich kann in der Frage keine Regel sehen, für welche Werte A durch L zugewiesen wird, kann also nicht positiv raten.

+0

Vielen Dank für Ihre Antwort und Vorschläge. Ich bin kein Programmierer und auch neu bei Stata (Entschuldigung, ich habe das auch nicht klargestellt). Ich werde genauer sein, wenn ich das nächste Mal eine Frage stelle. – TSY