CGSS数据清理:巧用重复命令
数据清洗时常需要反复运行一些命令,这样不仅耗费精力,而且容易出错,那么,如何避免一遍一遍地重复输入这些命令呢?本文以清洗CGSS数据地理信息为例,为大家简单介绍3种编写与运行命令的方法,希望能为大家所用。
CGSS数据关于调查对象的地理信息共有5个变量,他们分别是省/自治区/直辖市、地级市、县/区、乡/镇/街道、村/居委会,对应的变量名和变量标签如下图所示:
CGSS地理信息仅披露到省一级,对省以下级别则只进行编码,以区分开不同的调查点,未注明具体地点(这么处理的原因请见CGSS官网的相关说明)。下图所示为CGSS2013数据的地理信息:
由于CGSS数据每年地理信息的编码不统一,对于想依据地理信息做数据合并的用户来说,需求无法得到满足。有鉴于此,目前项目组决定要统一CGSS2010至CGSS2015数据中的地理信息编码,以确保这5年CGSS数据中的每一层级地理信息的每一个编码都对应唯一一个地点。
那么,该如何统一编码呢?
首先,以CGSS2015数据中的地理信息变量为标准,参照国家统计局发布的2015年统计用区划代码和城乡划分代码,整理出一套编码模板。编码模板共分为5个部分,分别针对省/自治区/直辖市、地级市、县/区、乡/镇/街道、村/居委会进行编码,模板命令长达1200多行。下图所示为变量s41省/自治区/直辖市的编码模板命令:
其次,将编码模板命令分别在CGSS2010至CGSS2015数据中运行匹配,这样,就可以将5年数据的地理信息编码统一起来。接着依据匹配结果不断修正更新编码模板,每更新一次编码模板,就要在5年数据中重新分别运行修改后的模板命令。
如果在do文件中重复编写模板命令,不仅麻烦,而且容易出错。这里为大家简单介绍3种编写与运行模板命令的方法:do文件、在do文件中使用program命令、ado文件。
方法一:do文件
do文件是一个文本文件,它的扩展名为“.do”,运行do文件时,Stata就会逐条运行do文件里的命令。Do的语法结构是:
do filename [arguments] [,nostop]
我们可以将编码模板命令单独编写在一个do文件中,给该do文件命名为district,如果需要在CGSS2013数据中运行编码模板命令,直接运行do文件即可。如下图所示:
需要注意的是,district.do文件需要放在当前目录下,否则,需要在文件名前写出完整路径。
方法二:在do文件中使用program命令
还可以把重复命令编写为一个program程序。定义program非常简单,以program filename开始,以end结束。这里把编码模板命令定义为程序district,生成编码模板命令如下图所示:
但是还需要基于编码模板在5年数据中的运行匹配情况不断修改编码模板,因此,在重新运行district前,需要删除内存中的程序district。删除程序命令如下图所示:
打开Stata第一次运行程序district时,因尚未定义该程序,Stata无法删除程序district,会弹出错误提示,命令capture可以解决这个问题。通常把命令capture放在其他命令的前面,告诉Stata当运行其他命令时,无论该命令是否起作用,Stata都不报错,并且继续运行后面的命令。命令capture的语法结构为:
capture [:] command
因此,将编码模板命令修改如下:
Stata处理program和do文件的方式相同,都是逐条运行其中的命令,但是运行程序的方式不同。运行do文件时需要在命令窗口输入“do filename”,运行program只需输入程序名称即可。运行程序district如下图所示:
方法三:ado文件
还可以将编码模板命令保存为一个ado文件。ado文件是以do文件形式编写program的扩展,它是自运行文件。保存方式非常简单,在do文件中编辑完模板命令后,在当前目录下,保存时选择扩展名.ado即可。只要在命令窗口直接输入文件名即可运行该文件。不过需要注意的是,ado文件的文件名必须和程序名保持一致。
以上内容只是我们基于CGSS数据清洗对Stata编写与运行命令方法的简单介绍,如果您想要了解更多内容,那就赶紧去看do、program和adofile的帮助文件吧。