2017-05-02 6 views
2

Ich habe ein Datensatz wie folgt aus:einen String als Variablennamen verwenden

string_var | var1 | var2 | var3 
var2  | 8 | 8 | 4 
var3  | 7 | 5 | 7   
var2  | 10 | 10 | 5 

ich, ob var1 testen müssen gleich zu entwedervar2odervar3, auf der Saite abhängig, die in string_var enthalten ist . Mein Problem ist, diese Zeichenfolge in Variablennamen zu konvertieren, um so etwas wie:

gen test=1 if var1==string_var 

, wo nach den == ich eine Art von Umwandlungsfunktion benötigen, lassen Stata die Zeichenfolge beispielsweise lesen var2 wie die folgenden:

gen test=1 if var1==var2 

Antwort

1

Mit nur zwei Möglichkeiten, können Sie bei der Auswahl verzweigen. (Mit mehreren Möglichkeiten, denke ich, Sie eine Schleife bräuchten.)

clear 
input str4 string_var var1 var2 var3 
var2   8  8 4 
var3   7  5 7   
var2   10  10 5 
end 

gen test = cond(string_var == "var2", var1 == var2, var1 == var3) 

list 

    +--------------------------------------+ 
    | string~r var1 var2 var3 test | 
    |--------------------------------------| 
    1. |  var2  8  8  4  1 | 
    2. |  var3  7  5  7  1 | 
    3. |  var2  10  10  5  1 | 
    +--------------------------------------+ 

EDIT:

hier eine allgemeinere Lösung. (Wenn jemand anderes über eine bessere Lösung nachdenkt, vergewissern Sie sich, dass Sie etwas schreiben.)

gen test = . 

levelsof string_var, local(names) 

quietly foreach name of local names { 
    replace test = var1 == `name' if string_var == "`name'" 
} 
+0

Ja, ich habe mehr als zwei Möglichkeiten, wie würde das zu einer Schleife führen? – 000andy8484

+0

Es funktioniert perfekt. Ich muss zugeben, dass ich noch nie gesehen habe, dass eine Variable direkt durch eine getestete Bedingung ersetzt wird. Danke vielmals. – 000andy8484

+0

Ich habe das nicht oft gesehen, außer im Zusammenhang mit zeilenweisen Operationen, bei denen Menschen z.B. der Name der Variablen, die das Maximum enthält (selbst wenn es Probleme gibt). –

Verwandte Themen