[轉錄]我常用到的stata命令(四)

看板NCHU-AE98作者 (mushiue)時間14年前 (2010/11/18 20:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我常用到的stata命令 (續) 前面說的都是對單個資料庫的簡單操作,但有時我們需要改變資料的結構,或者抽取來自 不同資料庫的資訊,因此需要更方便的命令。這一類命令中我用過的有:改變資料的縱橫 結構的命令reshape,生成退化的資料庫collapse,合併資料庫的命令append和merge。 縱列(longitudinal)資料通常包括同一個行為者(agent)在不同時期的觀察,所以處 理這類資料常常需要把資料庫從寬表變成長表,或者相反。所謂寬表是以每個行為者為一 個觀察,不同時期的變數都記錄在這個觀察下,例如,行為者是廠商,時期有2000、2001 年,變數是雇傭人數和所在城市,假設雇傭人數在不同時期不同,所在城市則不變。寬表 記錄的格式是每個廠商是一個觀察,沒有時期變數,雇傭人數有兩個變數,分別記錄2000 年和2001年的人數,所在城市只有一個變數。所謂長表是行為者和時期共同定義觀察,在 上面的例子中,每個廠商有兩個觀察,有時期變數,雇傭人數和所在城市都只有一個,它 們和時期變數共同定義相應時期的變數取值。 在上面的例子下,把寬表變成長表的命令格式如下: reshape long (雇傭人數的變數名), i((標記廠商的變數名)) j((標記時期的變數 名)) 因為所在城市不隨時期變化,所以在轉換格式時不用放在reshape long後面,轉換前後也 不改變什麼。相反地,如果把長表變成寬表則使用如下命令 reshape wide (雇傭人數的變數名), i((標記廠商的變數名)) j((標記時期的變數 名)) 唯一的區別是long換成了wide。 collapse的用處是計算某個資料庫的一些統計量,再把它存為只含有這些統計量的資料庫 。用到這個命令的機會不多,我使用它是因為它可以計算中位數和從1到99的百分位數, 這些統計量在常規的資料描述命令中沒有。如果要計算中位數,其命令的語法如下 collapse (median) ((變數名)), by((變數名)) 生成的新資料庫中記錄了第一個括弧中的變數(可以是多個變數)的中位數。右面的by選 項是根據某個變數分組計算中位數,沒有這個選項則計算全部樣本的中位數。 合併資料庫有兩種方式,一種是增加觀察,另一種是增加變數。第一種用append,用在兩 個資料庫的格式一樣,但觀察不一樣,只需用append空格using空格(檔案名)就可以狗 尾續貂了。簡單明瞭,不會有什麼錯。另一種就不同了,需要格外小心。如果兩個資料庫 中包含共同的觀察,但是變數不同,希望從一個資料庫中提取一些變數到另一個資料庫中 用merge。完整的命令如下: use (檔案名) [打開次要資料庫] sort (變數名) [根據變數排序,這個變數是兩個資料庫共有的識別資訊] save (檔案名), replace [保存次要資料庫] use (檔案名) [打開主要資料庫] sort (變數名) [對相同的變數排序] merge (變數名) using (檔案名), keep((變數名)) [第一個變數名即為前面sort後面的變數名,檔 案名是次要資料庫的名字,後面的變數名是希望提取的變數名] ta _merge [顯示_merge的取值情況。_merge等於1的觀察是僅 主庫有的,等於2的是僅輔助庫有的,等於3是兩個庫都有的。] drop if _merge==2 [刪除僅僅來自輔助庫的觀察] drop merge [刪除_merge] save (檔案名), replace [將合併後的檔保存,通常另存] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.95.44
文章代碼(AID): #1CvI4Jjr (NCHU-AE98)