上次說到:仔細看下圖,問題有兩個:
一個是問卷的觀察數(obs)不同,一個是race、sex這些必須轉換成虛擬變量(dummy variable)才有意義。後者上次已解決了,前者則是要利用if指令來處理missing values。
在Stata裡,missing value通常都是以 . 或.a、.b、.c來表示,也就是全部都以 . 開頭。所以我們心裡就會想:「對啊,我只要找出值不等於missing的就好了」。Stata有個很好用的指令:!missing(變數值),直接讓你只秀出來有值的變數。用這個function,再加上if指令,很快就可以完成了。if的比較指令先簡單介紹一下:
> 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於
== 等於 (這裡有兩個等號,因為如果只有一個等號,是assign值給左邊的變數,兩個等號才是比較是否相等)
但不要忘了,age與income的值都與其它人不一樣,所以你有兩個if指令要下,而且這兩個指令的關係是and,也就是age不是missing,而且income不是missing。那if之間的連接常用的就是and 或or:
& 等於
| 或者
那接下來,指令就會變成這樣:
sum race sex age income if !mi(age) & !mi(income)
!mi(age)是!missing(age)的縮寫。跑出來的結果如下圖:
這樣數量就一致了。如果照之前將race與sex都處理過,整體秀出來會像下面的樣子:
完整的code如下:
use http://twtcsl.org/dataset/gss2000.dta tab race tab race sex sum race sex age income tab race, gen(d) rename d1 dwhite rename d2 dblack rename d3 dother tab sex, gen(d) rename d1 dmale rename d2 dfemale sum dwhite dblack dother dmale age income if !mi(age) & !mi(income)
每次看見您的文章,對小的研究幫助真的很大。因為網路上在STATA的教學上真的很少,小的想要請問您,不知道是否會在STATA的軟體上使用Hausman Test的指令?因小的最近在學習這個,但一直無法突破指令設定,因為一直都設定錯誤。Hausman Test是在檢驗選RE和FE的兩者間的檢定。不知是否能請專家給予指導,在此先跟您說生謝謝了~
你的指令大概是什麼樣?出錯的訊息是什麼?雖然我沒用過,但或許看看語法或錯誤訊息,可以幫到你也說不定
你好:
看了您的文章一陣子,獲益頗多,想要請教一個問題。因為目前研究需使用Martina Morris等人提出的”Relative Distribution Methods”,但他們只提供R軟體的語法。後來有找到Ben Jann在2008年6th German Stata Users Group Meeting有發表”Relative Distribution Methods”的語法,command名為”reldist”。文章篇名為”Relative Distribution Methods in Stata”。在stata網站及Ben Jann的個人網站的確都有這篇文章,但我在stata裡不論用findit下載,或是用SSC下載都找不到”reldist”這個command,非常苦惱,所以想請教您是否清楚這是什麼狀況?
非常謝謝你!!
Hi Crab 您好,
我查了也查不到,作者那篇conference說will be available,所以最好的辦法就是寫信給作者了。
Hi Lin
已去信詢問作者,
一切就靜待回應了。
總之,謝謝你的意見!!
Hi Crab,
等有消息,再麻煩您跟大家分享囉!先謝謝你了!
Hi Lin:
Ben Jann 告訴我,他的這個語法還尚未完成,所以沒有放在SSC上面。因此我可能要另尋他法了。總之,非常謝謝你的意見!!
hi Lin,
想要請教你一個聽起來好像很基礎的問題
但我在stata上使用help 好像找不到。
請問stata裡面有沒有像spaa的 RV.UNIFORM(a,b) 這個功能?也就是要在兩個指定的數字之間跑亂數的功能?
謝謝你~
Hi Crab,
試試查help random_number_functions 吧!
hi Lin,
關於上次收入分配跑亂數的問題
我查了你說的語法
但實際操作上仍有一點問題
想再請教你:
b1代表收入,rincome代表跑亂數的收入
比方收入在 1000元的這個組人數特別多
我設定在750~1250讓這群人跑亂數
現在我的語法是這樣:
gen rincome=750+int(1250*uniform()) if b1==1000
我想請教的問題是:
b1裡有很多組需要跑亂數
要如何不用一直gen 新的變數,而可以將b1裡很多個收入組都跑亂數?
非常謝謝你
hi
我因為要做產業別的虛擬變量
所以做這樣的設定
tab ind,gen(di)
那顯示出大概di1~di30 共30組的變量
那我再做敘述性統計的時候
是否是在 sum y1 y2 x1 x2 x3…..di*
這樣呢?
是的!