如何用Stata进行数据清理

本文提供一些用Stata 12进行数据清理的基础知识,比较适合于刚刚接触Stata的童鞋,但这篇文章不提供Stata的下载安装,界面使用等基础知识。还需要说明的是,本人所使用的是OS X平台的Stata 12,不过我估计win系统的操作差异不大。

Stata是功能很强大的一款软件,你学得越多,Stata能帮你实现的事情就越多。如果你仅仅是一时想要处理数据,我建议你使用你比较熟悉的软件,Eviews,SPSS和R等都可以;但是如果你在将来很长一段时间都会接触到数据处理,统计分析,回归制图等,Stata则很值得你深入学习。

 

1. 一些良好的使用习惯

1.1 学会用 “help” 命令

学习的过程,不单单要学会知识,还有学会自学的能力。就比如说,如果你在学习Stata的过程中遇到了不懂的问题,你可以通过Google搜索或者询问朋友来解答你的疑惑。而值得一提的是,Stata本身也存在帮助你理解Stata的功能,这就是help命令。

在接触Stata的时候,你会接触到各种命令代码,如果你对某些命令代码不理解,你可以直接在Stata的命令框中,输入“help”+你不理解的代码。按下enter后,Stata会提供相应的信息,而且附有例子供你更好地学习和理解。

比如,你想要知道怎么使用 rename这个命令,你可以在Stata的命令框中输入“help rename”,Stata会弹出一个窗口,如图1所示。窗口里的内容包括”Title”,”Syntax”,”Menu”,”Description”和”Examples”。

rename on Stata

图1. help rename窗口

 

1.2 写do文件

还有一个良好的习惯是学会写do文件(do file)。

当你想要使用Stata的时候,你可以直接在Stata的命令框输入命令,然后来处理数据,但这不是一个很好的习惯,因为这样做带来很多弊端。

使用do文件的好处包括但不限于:

1. 易于更改:如果你在Stata命令框直接输入代码,在中途输入错误的命令后(比如数据被清楚了),由于无法撤回你就得重头到尾再输入一遍。但是使用do文件,写错了可以直接在do文件中更改,再运行一次即可;

2. 重复使用:如果你在将来要重新用到这些命令,直接在Stata上运行相应的do文件即可;

3. 提高交流效率:你可以将你的do文件发给你的合作者,这样他就可以根据do文件的内容来理解你的数据,甚至帮助你找出你处理后的数据集中的错误来源;

在Stata的上面窗口,如图2,点击Do-file Editor,即可得到输入和编辑do文件的地方,写好do文件之后点击save,保存到相应的路径即可。

do_file

 

图2. Stata的Do-file Editor

do文件的构成大致分为三部分,如图3所示。Part 1: clear表示每一次run这个do文件,都会清除掉你之前所使用的命令(一个清新的开始);Part 2: use”/XXX/XX…”是你想要处理的数据的路径名(你可以双击数据后,将显示在Stata中的数据路径复制到do文件中);Part 3: 之后就是数据清理的命令了。

do_file_demo

图3. do文件的样例

 

1.3 像程序员一样去行动

一般来说,数据处理的Stata教程不会提到这一点内容。而且这一点内容比较虚,我不知道什么才是程序员的思维方式,也不知道如何才能给大家提供这一点内容。由于我有一年的计算机专业基础,在跟我读经济学的同学接触后,我发现很多同学(特别是处理数据经验较少的同学)在了解这些命令的情况下,都不会懂得如何去跟这些命令或者手头的数据打交道。

其实很多时候,一些简单的代码就能实现复杂的功能,而如果你不懂得如何使用这些代码,你就只能达到零散地知道ABC的入门水平。

一个简单的例子是,我在没有学会在Stata中使用循环命令的时候,用简单的数据处理命令实现了我需要的类似于循环命令的功能(将数据分组,再对每组中的某变量进行求和,生产一个新的变量)。还有就是,很多同学只会在一个数据集的基础上处理数据,而不懂得将这些数据分为多个数据副本,各自处理后再合并起来即可。

这里有两点建议可以提供给大家:1. 如果不懂得如何实现某一功能,你可以先想想实现的过程会经过哪些步骤,而考虑每个步骤需要使用怎样的工具,然后再去找这些工具按,按步骤走即可;2.在这个过程中,前往不要担心出错的问题,要像程序员那样,敢于尝试,不停地在实践中学习,遇到问题后逐个攻破。Learning by doing~

 

2. 数据清理的基本命令

我们假设手中有一个(可能很大的)数据集,这个数据集包含的内容有很多,但是并不是所有的内容都是你需要的,这个时候你就要按照自己的需求,将这个数据集处理成一个专门为你的研究所需而“定制”的数据集。这一过程,就叫做“数据清理”。

2.1  if命令

下边提到的命令后边都可以加上“if”,用来表示仅仅对满足了if条件的部分内容进行更改,而不是对某变量的全部内容进行更改。结合下文,详细讲述。

 

2.2 keep和drop

你手中的数据集很大,里面包含了许多的观测值(Observation) 变量(Variables)。每一个样本就是一个观测值,而每一个样本所带的特征就是这些观测值的变量。而你只需要其中的一些变量,这个时候你就需要使用keep和drop 命令了。

【注:下文的变量一律用var表示。】

比如你的数据集有200个变量,而你只需要其中的10个变量,比如其中的id, GDP, income, age等等这种变量。从多个变量中保留少量变量,可以使用keep:

① keep var1  表示保留变量var1

② keep var1 var2 var3 表示保留var1 var2 var3多个变量(主要变量之间用空格键隔开就好,不要使用逗号等符号)

当你手头数据集的变量很少时,而你想要使用其中的大部分变量,你需要的仅仅是去除其中某些变量,这个时候可以使用drop:

③drop var1 表示去掉变量1

④ drop var1 var2 var3 表示去掉var1 var2 var3多个变量

有时候你想要保留变量var1,但是你要去掉var1的某些缺失值(数据集中用“.”表示缺失值),你可以使用:

⑤ drop var1 if var1==. 表示去掉var1变量中的缺失值(=表示赋值,==表示等于)

 

2.3 rename

在keep和drop变量之后,你就得到一个基本的数据集了。这时候你可以用rename 对数据集中的变量进行重新命名,将这些变量命令变成便于你理解的名字。

⑥ rename var1 age 表示将“var1”这个变量名变成“age”

 

2.4 generate和replace

generate用于生产新的变量,而replace则不生产新的变量,但是会按你的需要更改原变量里的数值内容。

比如数据集中只提供每个人的出生年份(用var1表示)而不是直接提供年龄(用age表示),两步命令即可:

⑦ generate age=0 表示生产一个数值都为0的age变量

replace age=2015-var1 将age中的数值由0变为“2015-var1”得到的数值

你可以可以直接用:

⑧ replace var1=2015-var1

rename var1 age

又比如你需要创建一些虚拟变量,比如按“是否为6岁以下的学龄前儿童”,生产children变量:

⑨gen children=0 #这里使用了generate的缩略符gen

replace children=1 if age<=6 表示如果age不大于6岁,令children数值为1

replace children=0 if age>6  表示如果age小于6岁,令children数值为0

 

3. 其他和一些资源

3.1 数据的检查

清理完数据之后,可以直接在Stata的命令框输入:

⑩ sum

这个时候Stata会显示处理的数据集的所有变量的基本统计特征(观察值数量,平均值,标准差,最小值,最大值),方便你检查处理后的整体的数据特征。

 

3.2 资源

英语世界存在许多讲述如何用Stata进行数据清理的文章(我当初就是靠阅读这些文章来进行学习的),但是许多同学不习惯英语阅读,因此我虽然用中文写这篇指导,但是更推荐的是各位在Google上搜索“Stata”+“Data cleaning”等关键词,来探索一个更美妙且广阔的世界。

 

一些资源:

1. 《高级计量经济学及Stata应用》,陈强:很实用的一本书,基本囊括你在做实证时所需要的知识;百度云下载

2.《Stata十八讲》,陈传波:轻巧但是比较过时;微盘下载

 

欢迎各位批评指正。

如想转载,请联系我。:)

联系我

Share

2 thoughts on “如何用Stata进行数据清理

  1. stata是边用边学的,当你需要某一个命令时,可以用英文(注意是用英文)在google上去描述你想要的命令。stata的论坛上一般会有解答。我当初开始学的时候总是在人大经济论坛搜索stata命令,后来发现上面的答案太少,而且很多时候不是最佳命令。
    如果想系统了解某一类命令,个人推荐UCLA 的stata论坛www.ats.ucla.edu/stat/stata/.
    如果想要系统学习应用微观计量的stata,那么cameron and trivedi的microeconometrics是我读过的最好的书,他们有本配套的microecnometrics using stata,上面会教你书中提到的各种计量方法的stata编码。不过此书的理论推导较难,很多时候中间步骤被省略了,最好是能上一学期使用这本书做教材的课。祝愿博主能够顺利申请到国外的经济学program,在老师的指导下系统学习应用微观计量。

    • 恩,你说的很对,还谢谢你提供的建议。我不是很习惯逛人大经济论坛,所以刚开始学习Stata的时候,我是Google了一些英文文档,然后处理过几次数据后,写的这篇文章。文章不是很系统,只希望能给中文世界添加一些资料。另,谢谢你的祝福!

发表评论

电子邮件地址不会被公开。 必填项已用*标注