全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
5496 1
2017-10-14

CGSS数据合并技巧:快速帮您筛选变量



调查数据中变量的存储类型不同,取值大相径庭。使用数据时,我们经常需要按照某种标准筛选变量,如何快速准确地筛选出所需的变量呢?本文给大家介绍一个命令findname,这是我们在CGSS数据合并过程中发现的Stata第三方命令,它可以帮助我们准确高效地找到所需变量。

findname不仅可以按照取值和变量的存储类型筛选变量,还可以按照变量标签、取值标签筛选变量。其语法结构是:

findname [varlist] [if] [in] [,options]

下面通过CGSS数据合并过程中遇到的三个小问题为大家简单介绍命令findname的用法。

问题一:给字符型变量添加“该年未调查”
纵向合并数据时,只有相同的变量才能合并在一起,不同的变量在合并时会产生无用的缺失值,这类缺失值与合并数据前数据本身的缺失值意义不同。为了避免混淆,我们在合并数据前分别对CGSS单年调查数据的缺失值进行了修改,字符型变量的缺失值修改为“調查問卷缺失值”。如下图所示:

QQ截图20171014095748.png



数据合并后,我们将字符型变量无用的缺失值定义为“该年未调查”,将“調查問卷缺失值”修改为缺失“”,以便对字符型变量本身的缺失值和因合并产生的无用的缺失值进行区分。完成这次修改,需要在合并数据中找出所有的字符型变量,findname可以帮助我们轻松完成这一工作。命令findname及选项type可以根据变量存储类型精确查找变量,并将查找出的结果保存为宏r(varlist),命令如下图所示:

QQ截图20171014095806.png



修改后结果如图所示:

QQ截图20171014095816.png



问题二:给取值-9添加取值标签
我们检查合并数据时发现,有个别变量的取值-9没有取值标签,经核对,-9的取值标签为“无法判断”。因此,我们需要找到所有包含取值-9的变量,为其添加取值标签。通过命令findname及选项any,可以快速找出所需的变量。同时,利用生成的宏r(varlist)给所有的取值-9批量添加取值标签“无法判断”。具体命令如下所示:

QQ截图20171014095826.png



问题三:给无取值标签的数值型变量添加取值标签
在合并数据中,对所有包含缺失值-1、-2、-3、-4的变量,我们都会为其添加取值标签-1“不适用”、-2“不知道”、-3“拒绝回答”、-4“该年未调查”。检查合并数据时,我们发现有一些数值型变量有缺失值-1、-2、-3、-4,但是没有取值标签。因此,我们要找出合并数据中没有取值标签的数值型变量,统一为他们添加取值标签。那么,如何筛选出这些变量?通过命令findname和dta_equal就能轻松搞定。

首先,使用命令findname和选项type筛选出合并数据中的所有数值型变量,保存为数据numeric.dta。命令如下图所示:

QQ截图20171014095835.png



然后,通过命令findname和选项vallabel找出合并数据中有取值标签的数值型变量,保存为数据varlabel.dta。命令如下图所示:

QQ截图20171014095845.png



数据numeric.dta包含所有的数值型变量,既包括含有取值标签的数值型变量,也包括不含取值标签的数值型变量。而数据varlabel.dta中只包括有取值标签的数值型变量。命令dta_equal可以对两个数据的变量进行逐一比较,并将两个数据中相同变量和不同变量分别保存为宏。命令dta_equal的语法结构是:

dta_equal filename1 filename2 [,options]

因此,使用命令dta_equal比对数据numeric.dta和varlabel.dta,就可以找出合并数据中没有取值标签的数值型变量,并为这些变量添加取值标签。

命令findname还有很多筛选变量的功能,同时,命令ds也有异曲同工之效,如果你感兴趣的话,那就抓紧时间安装查看吧。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-5-3 14:21:33
感谢总结,帮了大忙
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群