本文提供一些用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”。
图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,保存到相应的路径即可。
图2. Stata的Do-file Editor
do文件的构成大致分为三部分,如图3所示。Part 1: clear表示每一次run这个do文件,都会清除掉你之前所使用的命令(一个清新的开始);Part 2: use”/XXX/XX…”是你想要处理的数据的路径名(你可以双击数据后,将显示在Stata中的数据路径复制到do文件中);Part 3: 之后就是数据清理的命令了。
图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十八讲》,陈传波:轻巧但是比较过时;微盘下载
欢迎各位批评指正。
如想转载,请联系我。:)