[轉錄]我常用到的stata命令(四)
我常用到的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