Stata: 產生虛擬變量(Create dummy variables)

Stata是一套滿簡單、易學的統計軟體,最近在用它跑問卷分析,所以就產生了不少虛擬變量(dummy variables),於是就簡單寫篇教學文吧!

如果你拿到一個資料像是這樣的:

id language
1 1
2 1
3 2
4 3

language的數字代表不同的語言,1對應到Chinese,2對應到English,3對應到Spanish。要產生dummy variable,在stata最土法煉鋼的方式就是用gen指令(generate的縮寫,在stata輸入gen就行了)先產生一個變數,然後在用replace 將language的值指派給dummy variable。

Language有三個值,我們只要產生3-1=2 個虛擬變量,這點非常重要,一定要弄對,不然辛苦了半天跑出來的結果會非常怪。當然也有人傾向產生3個虛擬變量,到時候跑regression的時候少放一個當作是reference group,但一定要記得少放才行啊!

那我們就以Chinese為reference group,所以我們就不需要產生Chinese這個虛擬變量,而是產生dEnglish, dSpanish這兩個。開頭的d表示是虛擬變量,以示分別,免得自己弄錯。

gen是產生變數的指令,所以我們要先產生dEnglish與dSpanish。

gen dEnglish=0

gen dSpanish=0

再來就是要給這兩個新的變數1這個值。language欄位中2的值表示English,所以用replace把值指過去

replace dEnglish =1 if language==2

replace dSpanish =1 if language==3

注意:language==是兩個等號,不是筆誤。比較數值的時候用==,指派數值的時候用=。

很多人會搞混的一點就是:為什麼dEnglish跟dSpanish都要=1?產生虛擬變量的目的就是把上述的表格變成下面這樣:

id language dEnglish dSpanish
1 1 0 0
2 1 0 0
3 2 1 0
4 3 0 1

我們回顧一下每個變數的定義。Language是母語,dEnglish的定義則是此人的母語是English,的話值就是1,不是的話值就是0。dSpanish同理可推,如母語為Spanish值為1,否的話值為0。所以上面的語法才會dEnglish與dSpanish的值為1。

想一想,上面這樣寫有什麼問題?如果我們的table像下面這樣,問題就出現了:

id language dEnglish dSpanish
1 1 0 0
2 1 0 0
3 2 1 0
4 3 0 1
5 . 0 0

如果5這個人沒回答language這項,那依照我們上面的語法,先產生變數,然後把它的值指為0。這樣作的時候本來missing的值,也會被指為0。所以我們還要再補救一下:

replace dEnglish=. if missing(language)

replace dSpanish=. if missing(language)

在Stata中,missing的值我們通常都把它的值設為.。整個步驟這樣才算大功告成,完整語法如下:

gen dEnglish=0

replace dEnglish =1 if language==2

replace dEnglish=. if missing(language)

gen dSpanish=0

replace dSpanish =1 if language==3

replace dSpanish=. if missing(language)

下次介紹進階版:使用tabulate與gen產生虛擬變數。

標籤: