-
我常用到的
stata
命令
最重要的两个命令莫过于
he
lp
和
search
了。
即使是经常使用
stata
的人也很难,
也没必要记
住常用命令的每一个细节,
更不用说那些不常用到的了。
所以,
在遇到困难
又没有免费专家
咨
询时,使用
stata
自带的帮助文件就是最佳选择。
s
tata
的帮助文件十分详尽,面面俱到,
这既是好处也是麻烦
。当你看到长长的帮助文件时,是不是对迅
速找到相关信息感到没有
信心?
闲话不说了。
help
和
search
都是查找帮助文件的命令,它们之间
的区别在于
help
用于查找
精确的命
令名,而
search
是模糊查找。如果你知道某个命令的名字,并且想知道它的具体
使用方法,只
须在
stata
的命令行窗口中输入
h
elp
空格加上这个名
字。回车后结
果屏幕上
就会显示出这个命令的帮助文件的全部内容。如果你想知道在
< br>stata
下做某个估计或某种计
算,而不知道具体该如
何实现,就需要用
search
命令
了。使用的方法和
help
类似,只须把
准确的命令名改成某个关键词。
回车后结果窗口会给出所有和这个关键词相关的帮助文
件名
和链接列表。
在列表中寻找最相
关的内容,点击后在弹出的查看窗口中会给出相关的帮助
文件。耐心寻找,反复实验,通
常可以较快地找到你需要的内容。
下面
该正式处理数据了。我的处理数
据经验是最好能用
stata
的
do<
/p>
文件编辑器记下你做过
的工作。因为很少有一项实证研究能够一次
完成,所以,当你下次继续工
作时。能够重复
前面的工作是非常重要的。
有时因为一些细小的不同,
你会发现无法复制原先的结果了。
这
时如果有记录下以往工作的
do
文件将把你从地狱带到天
堂。
因为你不必一遍又一遍地试图
重现做过的
工作。在
stata
窗口上部的工具栏中有个孤立的小按钮,把
鼠标放上去会出现
“
bring do-file
editor to front
”
,点击它就会出现
do
文件编辑器。
为了使
do
文件能够顺利工作,一般需
要编辑
do
文件的“头”和“尾”
。这
里给出我使用的
“头”和“尾”
。
/*
(标签。简单记下文件的使命。
)
*/
capture clear
(清空内存中的数据)
capture log close
(关闭所有打开的日志文件)
set
mem 128m
(设置用于
stata
使用的内存容量)
set more off
(关闭
more
选项。如果打开该选项,那么结
果分屏输出,即一次只输出一屏结
果。你按空格键后再输出下一屏,直到全部输完。如果
关闭则中间不停,一次全部输出。
)
set matsize 4000
(设置矩阵的最大阶数。我用的是不是太大了?)
cd D:
(进入数据所在的盘符
和文件夹。和
dos
的命令行很相似。
)
log
using
(文件名)
.log,replace
(打开日志文件,并更新。日志文件将记录下所有文件运
行后给出的结果,如果你修改
了文件内容,
replace
选项可以将其更新为最近运行的结
果。
)
use
(文件名)
,clear
(打开数据文件。
)
(文件内容)
log close
(关闭日志文件。
)
exit,clear
(退出并清空内存中的数据。
)
这个
do
文
件的“头尾”并非我的发明,而是从沈明高老师那里学到的。
版权归沈明高老师。
(待续)
p>
我常用到的
stata
命令:
(续)
实证工作中往往接触的是原始数
据。
这些数据没有经过整理,
有一些错漏和不统一的地方。
比如,对某个变量的缺失观察值,有时会用点,有时会用
-9
,
-99
等来表示。回归时如果使
用这些观
察,往往得出非常错误的结果。还有,在不
同的数据文件中,相同变量有时使用
的变量名不同,会给合并数据造成麻烦。因此,拿到
原始数据后,往往需要根据需要
重新
生成新的数据库,并且只使用这个新库处理数据。
这部分工作不难,但是非常基础。因为
如
果在这里你不够小心,后面的事情往往会白做。
假
设你清
楚地知道所需的变量,现在要做的是检查数据、生成必要的数据并形成数据库供
将来使用
。检查数据的重要命令包括
codebook
,
su
,
ta
,
des
和
list
。其中,
codebook
提供
的信息最全面,
缺点是不能使用
if
条件限制范围,所以,有时还要用别的帮帮
忙。
su
空格
加变量名报告相应变量的
非
缺失的观察个数,均值,标准差,最小值和最大值。
ta
空格后
面加一个(或两个)变量名是报告
某个变量(或两个变量二维)的取值(不含缺失值)的频
数,比率
和按大小排列的累积比率。
des
后面可以加任意个变量名,只要数据中有。它报
告变量的存储的类型,显示的格式和标签
。标签中一般记录这个变量的定义和单
位。
< br>list
报告变量的观察值,
可以用
if
或
in
来限制范围。
所有这些命令都可以后面不加任何变量名,
报告的结果是正在使用的数据
库中的所有变量的相应信
息。
说起来
苍白无力,
打开
stata
亲
自实验一下吧。
顺
带说点儿题外话。除了
codebook
之外,上述统计类的命
令都属于
r
族命令(又
称一般命
令)
。执行后都可以使用
< br>return
list
报告储存在
r
()中的统计结果。最典型的
r
族命令当属
summarize
。它会把样本量、均值、标准差
、方差、最小值、最大值、总和等统计信息储
存
起来。你在执行
su
之后,只需敲入
return list
就可以得到所有这些信息。其实,和一般命令
的
return
命令类似,估计命令(又称
p>
e
族命令)也有
ereturn
命令,具有报告,储存信息的
功
能。在更复杂的编程中,比如对回归分解,计算一些程序中无法直接计算的统计量,这
< br>些功能更是必不可少。
检查数据时,先用
codebook
看一下它的值域和单位。如果有
-9
,
-99
这样的取值,查一下
问卷中对缺失值的记录方法。
确定它们是缺失值后,
改为用点记录。
命令是
replace (
变量名
)=.
if (
变量名
)==-9
。再看一下用点记录的缺失值有多少,作为选用变量的一个依据。
得到可用的数据后,我会给没有标
签的变量加上注解。或者统一标签;或者统一变量的命
名规则。
更改变量名的命令是
ren
(原变量名)空格(新变量名)<
/p>
。定义标签的命令是
label
var
(变量名)空格”
(标签内容)
”
p>
。整齐划一的变量名有助于记忆,简明的标签有助于明
确变量的单位
等信息。
如果你需要使用通过原始
变量派生出
的新变量,那么就需要了解
gen
,
e
gen
和
replace
这三
个命令。
gen
和
re
place
常常在一起使用。它们的基本语法是
gen (
p>
或
replace)
空格(变量名)
=(表达式)
。二者的不同之处在于
gen<
/p>
是生成新变量,
replace
是重新定
义旧变量。
虚拟变量是
我们常常需要用到的一类
派生变量。如果你需要生成的虚拟变量个数不多,可
以有两种方法生成。一种是简明方法
:
gen
空格(变量名)=(
(限制条
件)
)
[
这
外面的小
括弧是命令需要的,里面的小括弧不是命令需要的,只
是说明“限制条件”并非命令
]
。如
果
某个观察满足限制条件,
那么它的这个虚拟变量取值为
1
,
否
则为
0
。
另一种要麻烦一点。
就是
gen
(变量名)=
1 if
(取值为一限制条件)
replace
(相同的变量名)=
0
if
(取值为零的限制条件)
两
个方法貌似一样,
但有一个小小的区别。
如果限制条件中使用的变量都没有任何缺失值,
那么两种方法的结果一样。如果有缺失值,第一种方法会把是缺失值的观察
的虚拟变量都
定义为
0
。而第二种方法可以将虚拟变量的取值分为三种,一是等于
1
,二是等于
0
,三是
等于缺
失值。这样就避免了把本来信息不明的观察错误地纳
入到回归
中去。下次再讲如何
方便地生成成百上千个虚拟变量。
我常用到的
stata
命令:
(续)
大量的虚拟变量往往是根据某
个已知变量的取值生成的。
比如,
在某个回归中希望控制每个<
/p>
观察所在的社区,
即希望控制标记社区的虚拟变量。
社区数目可能有成百上千个,
如果用上
次的所说的方
法生成就需要重复成百上千次,这也太笨了。大量生成虚拟变量的命令如下;
ta
(变量名)
,
gen(
(变量名)
)
第一个括号里的变量名是已知的变量,
在上面的例子中是社区编码。
后一个括号里的变量名
是新生成的虚拟变量的共同前缀,后面跟数字表
示不同的虚拟变量。如果我在这里填入
d
,
那么,上述命令就会新生成
d1
,
d2
,等等,直到所有社区都有一个虚拟变量。
在回归中控制社区变量,
只需简单地
放入这些变量即可。
一个麻烦是虚拟变量太多,
怎么简
单地加入呢?一个办法是用省略符号,
d*
表示
所有
d
字母开头的变量,另一法是用破折号,
< br>d1-d150
表示第一个到第
150
< br>个社区虚拟变量(假设共有
150
个社区)
。
还有一种方法可以在
回归中直接控制虚拟变量,
而无需真的去生成这些虚拟变量。
使
用命令
areg
可以做到,它的语法是
areg
(被解释变量)
(解释变量)
,
absorb
(变量名)
absorb
选项后面的变量名和前面讲的命令中第一个变量名相同。<
/p>
在上面的例子中即为社区编
码。回归的结果和在
< br>reg
中直接加入相应的虚拟变量相同。
生成变量的最后一招是
egen
p>
。
egen
和
ge
n
都用于生成新变量,但
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
选项将更新你对数据库的修改,所
以
一定要小心使用。
最好另存一个新的数据库,
如果把原始库改了又变不回去,
就叫天不应叫
地不灵了
。
我常用到的
stata
命令
(续)
前面说的都是对单个数据库的简单操
作,但有时我们需要改变数据的结构,或者抽取来自
不同数据库的信息,
因此需要更方便的命令。
这一类命令中我用过的有:
改
变数据的纵横结
构的命令
resha
pe
,生成退化的数据库
collapse
,合并数据库的命令
append
和
merge
。
< br>纵列(
longitudinal
)数据
通常包括同一个行为者(
agent
)在不同时期的观察,所以处理这
类数据常常需要把数据库从宽表变成长表,<
/p>
或者相反。
所谓宽表是以每个行为者为一个观察,
不同时期的变量都记录在这个观察下,例如,行为者是厂商,时期有
2000
、
2001
年
,变量
是雇佣人数和所在城市,假设雇佣人数在不同时期不同,所在城市
则不变。宽表记录的格
式是每个厂商是一个观察,没
有时期变量,雇佣人数有两个变量,分别记录
2000
年和
p>
2001
年的人数,所在城市只有一个变量。所谓长
表是行为者和时期共同定义观察,在上面的例
子中,
每个厂商有两个观察,有时期变量,雇佣人数和所在城市都只有一个,它们和时期变
p>
量共同定义相应时期的变量
取值。
在上面的例子下,把宽表变成长表的命令格式如下:
reshape long
(雇佣人数的变量名)
,
i(
(标记厂商的变量名)
)
j(
(标记时期的变量名)
)
p>
因为所在城市不随时期变化,所以在转换格式时不用放在
resha
pe long
后面,转换前后也不
改变什么。相反地,如果把
长表变成宽表则使用如下命令
reshape wide
(雇佣人数的变量名)
,
i(
(标记厂商的变量名)
)
j(
(标记时期的变量名)
)
p>
唯一的区别是
long
换成了
wide
。
collapse
的用处是计算某个数据库的一些统计量,再把它存为只含
有这些统计量的数据库。
用到这个命令的机会不多,我使用它是因为它可以计算中位数和
从
1
到
99
的
百分位数,这
些统计量在常规的数据描述命令中没有。如果要计算中位数,其命令的语法
如下
collapse
(median) (
(变量名)
),
by(
(变量名)
)
生成的新数据库中记录了第一个括号中的变量(可以是多个变量)的中位数。右面的
< br>by
选
项是根据某个变量分组计算中位数,没有这个选项
则计算全部样本的中位数。
合
并数据库有两种方式,一种是增加
观察,另一种是增加变量。第一种用
append
,用在两
p>
个数据库的格式一样,但观察不一样,只需用
append
空格
using
空格
(文件名)就可以狗
尾续貂了。简单明了,不会有什么错。另一种就不同了,需要格外小
心。如果两个数据库中
包含共同的观察,但是变量不同,希
<
/p>
望从一个数据库中提取一些变量到另一个数据库中用
merge<
/p>
。完整的命令如下:
use
(文件名)
[
打开辅助数据库
]
sort
(变量名)
[
根据变量排序,这个变量是两个数据库共有的识别信息
]
save
(文件名)
,
replace [
保存辅助数据库
]
use
(文件名)
[
打开主数据库
]
sort
(变量名)
[
对相同的变量排序
]
merge
(变量名)
using
(文件名)
,
keep(
(变量名)
)
[
第一个变量名即为前面
sort
后面的变量名,
文件名是辅助数据库的名字,后面的变量名是
希望提取的变量名
]
ta _merge [
显示
_m
erge
的取值情况。
_merge
等
于
1
的观察是仅主库有的,
等于
2
的是仅辅助
库有的,等于
< br>3
是两个库都有的。
]
drop if _merge==2
[
删除仅仅来自辅助库的观察
]
drop merge
[
删除
_merge]
save
(文件名)
, replace
[
将合并后的文件保存,通常另存
]
我常用到的
stata
命令
(续)
讲到这里似乎对于数据的生
成和处理
应该闭嘴了。
大家可能更想听听估计、
检验这些事情。
但我并不想就此止住,
因为实际中总是有一些简单套用命令无法轻易办到
的特殊要求。
此时
至少有两
条路可以通向罗马:一是找到更高级的命令一步到位;二是利用已知简单命令多
< br>绕几个圈子达到目的。
下面讲一个令我刻骨铭心的经历,这也是迄
< br>今我所碰到的生成新数据中最繁复的了。原始
数据中包含了可以识别属于同一个家
庭中所有个人的信息和家庭成员与户主关系的信息。
目
的是利用
这些信息建立亲子
关系。
初步的构想
是新数据库以子辈为观察,
找到他们的父母,
-
-
-
-
-
-
-
-
-
上一篇:人教版英语八年级下册词组
下一篇:设备日常保养记录表01717