一份经济微观数据库的数据清洗快速指南

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2023-3-30 20:58:46 | 显示全部楼层
前人之述备矣,我只是浅踩了几个坑。
主要软件: stata、Excel  
将就电脑页面排的版
一、流行的国内数据库:

大部分微观数据库文件似乎以 sas、stata、excel 文件为主。
按主体(社区问卷、家庭问卷、社会文件)和主题(背景信息、健康、经济...)分开。
每一年的截面数据也是分开的,
所以需要自己处理成面板数据。
学生邮箱在官网申请即可。
大型、综合数据库

1、CFPS:www.isss.pku.edu.cn/cfps/
中国教育追踪调查:CFPS由北京大学中国社会科学调查中心(ISSS)实施。跟踪收集个体、家庭、社区三个层次的数据,反映中国社会、经济、人口、教育和健康的变迁,为学术研究和公共政策分析提供数据基础。
2、CMDS:数据申请 (chinaldrk.org.cn)
中国流动人口动态监测数据:国家卫生健康委自2009年起一年一度大规模全国性流动人口抽样调查数据,内容涉及流动人口及家庭成员基本信息、流动范围和趋向、就业和社会保障、收支和居住、基本公共卫生服务、婚育和计划生育服务管理、子女流动和教育、心理文化等。
3、CHARLS:中国健康与养老追踪调查 (pku.edu.cn)
中国健康与养老追踪调查:中国健康与养老追踪调查。北京大学国家发展研究院主持、中国社会科学调查中心执行的一项大型跨学科调查项目代表中国45岁及以上中老年人家庭和个人的高质量微观数据。
4、中国统计年鉴:城市数据、区域数据...
这个网上整理好的面板数据满天飞。
其他:例如还有中国家庭金融调查,但没有面向社会开放。
我们还可以用一些小的专题数据库来辅助主要数据库进行分析。
例如北大普惠金融数据库:北京大学数字普惠金融指数
例如现在关于城市数字经济的测量,
大部分人采用的是赵涛(2020)[1]的方法,
将城市统计年鉴+普惠金融的数据作为指标。
还有一些付费网站(学校可能会有买的[2])



经济学还有以上付费数据库,可以看自己学校有没有购买

金融数据库不太了解,锐思看起来挺好用
经济方面:中经网、EPS网页直接整理面板,非常好用。
互联网上的数据库灰色产业
网络上大量数据库有免费账号售卖,
其实就是学生把自己的学校账号权限集合成了数据库访问网站。
二、 stata 清洗代码:

推荐教程

教程视频,看一个足矣(两小时):
简介里提到了这位up个人 github 主页(录屏和do文件)
我个人遇到过的一些情况

1、中文数据库导入的转码问题

中文乱码,
要么更新 stata 版本、要么使用代码
方法一:处理 cmds 时遇到了
clear
cd "C:\Users\Desktop\转码"    // 新建一个转码文件夹,然后修改自己的路径
unicode encoding set gb18030
unicode analyze 流动人口数据个人问卷2018.dta   // 文件名根据自己的数据进行调整
unicode translate 流动人口数据个人问卷2018.dta, invalid   // 文件名根据自己的数据进行调整方法二:处理 charls 的PSU.dta[3]时遇到省份、城市乱码
cd "D:\household_and_community_questionnaire_data"  //设置文件储存地点
unicode analyze PSU.dta //PSU.dta换成要编译的文件
unicode encoding set "GB18030"
unicode retranslate psu.dta, transutf8方法二详细解释可以看这位答主的文章:
Stata 中文字符显示成问号,该怎么解决?
2、数据库的匹配

无非就是围绕样本的 ID、year 进行整合
最重要的是掌握工!作!流!程!
一般在跑回归时都会发生“变量不够”、“遗失变量”等惨剧,
保留完整的流程文件夹是很有必要的。
\begin{cases}  文件夹准备 \begin{cases}  原始数据\\ 数据清洗\\ 数据分析  \end{cases} \\核心命令 :merge\\  清理顺序  \begin{cases}   筛选问卷变量:\text{问卷结构}\\   \left. \begin{aligned}   每年变量横向匹配\\ 历年数据纵向匹配\\    \end{aligned}         \right\} 过程 \end{cases}    \end{cases}   
\\以下代码是上面框架图的latex代码,便于记录便于下次忘了格式好查看
\begin{cases}
文件夹准备
\begin{cases}
原始数据\\ 数据清洗\\ 数据分析
\end{cases}
\\核心命令 :merge\\  清理顺序
\begin{cases}
筛选问卷变量:\text{问卷结构}\\
\left. \begin{aligned}
每年变量横向匹配\\ 历年数据纵向匹配\\   
\end{aligned}         \right\} 过程
\end{cases}  
\end{cases}merge:stata 的匹配代码
以下只写简洁解释,详细解释可看这位答主的解释:
fgzfgz:1.4 Stata数据匹配、接驳
简单来:
//master_data.dta就是基底数据库,using_data.dta就是我们要匹配上去的数据库
//m:n id 意思就是第一个数据的m个id可以对应n个第二个数据库的样本id
// 所以我们也可以添加多个匹配条件,例如merge 1:1 id year treat ......
************横向匹配**************************
use "master_data.dta"
merge m:n id using "using_data.dta"
drop _merge
save "new_data.dta"
************纵向匹配**************************
use "data1.dta"
append using "data2.dta"
save "new_data.dta"3、插值法

线性插值,面板数据,
老规矩,先标记, xtset:id \quad year
by id: ipolate YY year,gen(YYY)  //内插,中间空缺值,填完后命名为新变量YYY
by id: ipolate XX year,gen(XXX) epolate //外插,边缘空缺值,填完后命名为新变量XXX我的建议是,能用 forvalues 就用 forvalues [4]
可以把自己要补的所有数据命令为 var“n” [5]
简单粗暴,一气呵成。
\stackrel{内插}{\longrightarrow} \\这里是latex箭头写字代码,方便下次想不起来了看看循环如下:
var_i  \stackrel{内插}{\longrightarrow}varx_i\stackrel{外插}{\longrightarrow}varn_i\stackrel{替换}{\longrightarrow}var_i\stackrel{删除}{\longrightarrow}varx_i \& varn_i
forvalues i=1/n{ //n是循环数,就是我们需要插值的变量var的种类个数
by id: ipolate var`i' year,gen(varx`i')
by id: ipolate varx`i' year,gen(varn`i') epolate
replace var`i' =  varn`i'
drop  varx`i'   varn`i'
}
4、一些细节处理

字符转数字:
例如 charls 数据库的 communityID 就是以字符形式存在的。
虽然中文作为变量名也可以匹配,但当长度太长时stata似乎不能处理,
使用命令强制转化成数字:
destring ID householdID communityID , replace force *加上force,正义执行!日期转码
有些时候我们下载的日期代码不能被 stata 识别,
例如一次课堂作业,我想展现中国的自信!
给老师一点小小的中国震撼。(这就是中国.jpg
用的是艾媒咨询的华为、苹果笔记本淘宝数据。
ps:
当时顺便找了中日俄美的出口贸易数据,数据来源世界银行
但尴尬的是,里面 Excel 加载的日期格式为Y-M-D, stata 不能直接识别



2是华为,1是苹果,销量是nurmber,日期是year那列

使用代码:(我在经管之家找的代码)
画图命令我还是觉得 scatter 比 xtline 好看
clear
import excel "E:\桌面\笔记本.xlsx", sheet("Sheet1") firstrow
generate date=date(year, "YMD") //识别日期
format date %td //进一步转化
destring nurmber, replace force //如前文,把销量从字符格式转化为数字
format sales %9.0g //保留数字格式


绿色是苹果,金色是华为。可以看到date被处理后变成特殊的日期形式,而且可以直接用stata画散点图。原始图不见了,就简单重画了,请勿在意这鬼畜的配色

5、去尾处理

去除不良的极端数据,不过我还没用过,暂时不会。
三、 EXCEL  

1、 vlookup 函数

用多了就觉得 stata 比 Excel 快多了。
经济最好找数据和分析的肯定是城市面板数据了,
少不了城市代码匹配
请参考:链接里还贴心地附上了城市代码,强烈感谢!
2、字符拆卸

就经济学的计量而言,目前顶流方案当属 DID 。
目前如果学校有学生计量论文比赛,大概率是“双重差分法”的纯肉搏(狗头)
做 did 时我们就需要手动记录政策变量。比如智慧城市、创新城市分三批分别在几年内试点。
这时候我们可不能傻乎乎地挨个复制粘贴,请使用 Excel 的字符拆分。
比如拆试点城市的集合“北京,重庆,天津,上海”,
可以选中该空格, “数据”\Rightarrow“分列” ,
“文本分列向导”对话框选择“分隔符号”,点击“下一步”,勾选“分隔符号”中的“,”。
此时就可以完成分行。再结合VLOOKUP函数匹配即可。
3、删改字符

巧妙运用 vlookup 已经能应对大多数情况,
但依旧不够!
数据清洗之坑防不胜防
有些 Excel 文件 city\_id 是1100,有些是110000
有些是成都,有些则是成都


  • Excel 去字符操作:A2=LEFT(A1,LEN(A1)-1)
  • Excel 加字符操作:A2=A1&"市"
4、数据库合并

请看大屏幕!

四、结束

这几天经管之家关闭了,
发觉好多 stata 的基础问题都找不到问的地方,,,,,
90%的问题都是从知乎、经管之家、B站找到的解决方法。
可谓前人之述备矣,我只浅踩了几个坑。
参考


  • ^赵涛, 张智, & 梁上坤. (2020). 数字经济、创业活跃度与高质量发展——来自中国城市的经验证据. 管理世界, 36(10), 65–76. https://doi.org/10.19744/j.cnki.11-1235/f.2020.0154
  • ^可以关注自己学校的图书馆资源
  • ^charls数据库样本id匹配的省份和城市,在其网站2013年的数据中有,此后继续沿用但不再额外在其他年份里更新
  • ^stata循环语句
  • ^例如var1,var2,var3,var4......
回复

举报 使用道具

4

主题

7

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-3-30 20:59:09 | 显示全部楼层
顶[赞同][赞同]
回复

举报 使用道具

2

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-3-30 20:59:28 | 显示全部楼层
大神
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表