作者mushiue (mushiue)
看板NCHU-AE98
標題[轉錄]我常用到的stata命令(三)
時間Thu Nov 18 20:49:45 2010
我常用到的stata命令:
(續)
大量的虛擬變數往往是根據某個已知變數的取值生成的。比如,在某個回歸中希望控制每
個觀察所在的社區,即希望控制標記社區的虛擬變數。社區數目可能有成百上千個,如果
用上次的所說的方法生成就需要重複成百上千次,這也太笨了。大量生成虛擬變數的命令
如下;
ta (變數名), gen((變數名))
第一個括弧裡的變數名是已知的變數,在上面的例子中是社區編碼。後一個括弧裡的變數
名是新生成的虛擬變數的共同首碼,後面跟數位表示不同的虛擬變數。如果我在這裡填入
d,那麼,上述命令就會新生成d1,d2,等等,直到所有社區都有一個虛擬變數。
在回歸中控制社區變數,只需簡單地放入這些變數即可。一個麻煩是虛擬變數太多,怎麼
簡單地加入呢?一個辦法是用省略符號,d*表示所有d字母開頭的變數,另一法是用破折
號,d1-d150表示第一個到第150個社區虛擬變數(假設共有150個社區)。
還有一種方法可以在回歸中直接控制虛擬變數,而無需真的去生成這些虛擬變數。使用命
令areg可以做到,它的語法是
areg (被解釋變數) (解釋變數), absorb(變數名)
absorb選項後面的變數名和前面講的命令中第一個變數名相同。在上面的例子中即為社區
編碼。回歸的結果和在reg中直接加入相應的虛擬變數相同。
生成變數的最後一招是egen。egen和gen都用於生成新變數,但egen的特點是它更強大的
函數功能。gen可以支援一些函數,egen支援額外的函數。如果用gen搞不定,就得用egen
想辦法了。不過我比較懶,到現在為止只用用取平均、加和這些簡單的函數。
有的時候資料情況複雜一些,往往生成所需變數不是非常直接,就需要多幾個過程。曾經
碰到原始資料中記錄日期有些怪異的格式。比如,1991年10月23日被記錄為19911023。我
想使用它年份和月份,並生成虛擬變數。下麵是我的做法:
gen yr=int(date)
gen mo=int((data-yr*10000)/100)
ta yr, gen( yd)
ta mo, gen( md)
假設你已經生成了所有需要的變數,現在最重要的就是保存好你的工作。使用的命令是
save空格(檔案名),replace。和前面介紹的一樣,replace選項將更新你對資料庫的修
改,所以一定要小心使用。最好另存一個新的資料庫,如果把原始庫改了又變不回去,就
叫天不應叫地不靈了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.95.44