2017-05-02 158 views
2

我有一個這樣的數據集:使用一個字符串變量名

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

我需要測試是否var1是包含在string_var等於要麼var2var3,根據不同的字符串。我的問題是將這些字符串轉換成變量名做這樣的事情:

gen test=1 if var1==string_var 

何地,==後,我需要某種形式的轉換功能,讓Stata的讀取字符串如var2如下:

gen test=1 if var1==var2 

回答

1

只有兩種可能性,您可以選擇分支。 (有幾種可能性,我想你會需要一個循環。)

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

編輯:

這裏是一個更通用的解決方案。 (如果有人認爲一個整潔的解決方案,一定要張貼。)

gen test = . 

levelsof string_var, local(names) 

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

是的我有更多的兩個選擇,這將如何轉化爲循環? – 000andy8484

+0

它完美的作品。我必須承認,我從來沒有見過這樣直接用測試條件替換變量。非常感謝。 – 000andy8484

+0

我並沒有經常看到這一點,除了在人們想要的行式操作的情況下。無論哪個變量的名稱都包含最大值(每當有關係時本身就會產生問題)。 –