作者mushiue (mushiue)
看板NCHU-AE98
标题[转录]我常用到的stata命令(四)
时间Thu Nov 18 20:50:25 2010
我常用到的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