Stata数据处理:一文搞定CEIC数据库

文摘   教育   2024-10-05 22:00   山西  

👇 连享会 · 推文导航 | www.lianxh.cn

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024机器学习与因果推断

  • 懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。
  • 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。 


作者:初虹 (微信公众号-虹鹄山庄)
邮箱:ch2099058972@163.com


目录

  • 1. Excel 插件

  • 2. 下载数据

  • 3. 文件夹体系

  • 4. 单个文件处理

  • 5. 批量文件处理

  • 6. 代码优化

  • 7. 合并多个文件

  • 8. 总结

  • 9. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


CEIC 数据库可以通过 CDMNext 在线访问。CEIC 中国经济数据库涵盖超过 42 万条时间序列数据,18 个宏观经济部门,覆盖 297 个地级市和 2000 多个县。其丰富的数据、简洁的界面,已经成为笔者搜集地级市数据的最重要来源之一。

CEIC 数据库也提供了 API 功能,支持 Python、R 和 EViews 三种接口。做好相关配置后,我们可以直接在软件中访问 CEIC 数据库,非常方便。但是该功能取决于所在的机构是否购买了此服务,比如笔者所在的学校便没有购买 API 服务,因此无法使用该功能。

不过,CEIC 数据库也提供了 Excel 插件,可以直接通过插件下载和刷新 Excel 文件的数据 (操作系统需为 Windows 7 SP1 及以上、Office 版本需为 2007 及以上)。我本以为 CEIC 数据的 Excel 插件用起来不会太顺手,没想到从配置到使用都十分容易。本文便从数据的下载和更新说起,然后再通过 Stata 将数据整理成规范的面板数据。

1. Excel 插件

首先,下载「CEIC Excel 插件」。插件版本需要根据自己的 Windows 系统和 Microsoft Office 版本进行选择。

下载后,双击 .exe 执行文件,默认安装即可。重启 Excel 便可看到 CDMNext 选项卡。

然后在连接校园网的前提下,点击登录,输入个人账号和密码 (需要注册),稍等片刻即可连接成功。

以下是选项卡中几个重要的选项的含义:

  • 粘贴 CDMNext 数据:复制网页版 CDMNext 的数据,然后粘贴到当前 Excel;
  • 自动刷新:只要进入工作表,便自动更新数据;
  • 更新工作簿:手动更新整个工作簿,速度较慢;
  • 更新工作表:手动更新当前工作表;
  • 刷新下载:刷新当前 CDMNext 下载链接;
  • 插入下载:打开 CDMNext 选项框,可以勾选需要的数据进行插入;
  • 访问 CDMNext:进入网页版,在线访问;
  • 选项:基本上不用修改,语言设置里除了选择中文外,最好手动把数据库的语言由「自动检测」修改为「本地」,以保证每次通过插件下载和更新的数据变量名称都为中文。

由于操作都十分基础,这里便不再演示。使用前推荐先浏览一遍「CDMNext 插件用户手册」。

2. 下载数据

我们可以通过网页端或 Excel 插件在线访问 CDMNext,并进行数据下载。选择数据表的下载方向为「行」,得到的数据结构如下图 2 所示,直接使用 CEIC 数据库的默认命名规则 (下图 3)。

3. 文件夹体系

我习惯为每个项目建立一个文件夹,在父文件夹下可以建立多个子文件夹。这样原始文件、临时文件和最终文件都不会混乱。

* 在当前工作目录下建立 lianxh_test 文件夹
cap mkdir lianxh_test
global path "./lianxh_test"

* 在当前路径下,生成 ceic 子文件夹,以及 Raw、Temp、Final 三个孙文件夹
cap efolder ceic, cd("$path") sub(Raw Temp Final) noc
global DR "$path/ceic/Raw" // 原始文件
global DT "$path/ceic/Temp" // 临时文件
global DF "$path/ceic/Final" // 最终文件

4. 单个文件处理

观察原始数据表,确定清洗顺序:首先,删除无用信息。B-Z 列多为数据的描述性统计量和其他不必要信息,可以仅保留 E 列 (下图 2)。接着,使用 laboneforeach 将首行处理成便于 reshape long 的格式 (下图 3)。

* 首行作为变量名称和变量标签
labone, nrow(1)
foreach v of varlist _all {
renvarlab `v', label
}

然后,根据 : 对首列进行分列操作 (split _0, p(":") gen(name)),分离出省市名称等 (下图 4)。再将宽型数据转换成长型数据,这里使用的是比 reshape long 更简单的 gather 命令 (gather _*),新生成变量名称默认为 variablevalue (下图 5)。

接下来,通过 variable 生成年份变量 year,将 gather 生成的 value 重命名。我在这里通过 ustrregexra() 函数利用正则表达式仅保留中文字符, 再用一直保留的单位value 添加标签,便可得到下图 b。

最后,我们再仅保留必要变量、为省份和地级市行政名称变量重命名、destring 为数值型变量,便能清洗得到下图的效果。

drop variable name1 单位
rename (name2 name3) (prov_name city_name)
replace city_name = prov_name if (city_name == "")
destring, replace
save "$DT/国内生产总值.dta", replace

此部分完整的代码如下:

import excel "$DR/数列.xlsx", sheet("我的数列") allstring clear
drop B-D F-Z
labone, nrow(1)
foreach v of varlist _all {
renvarlab `v', label
}
split _0, p(":") gen(name)
drop in 1
drop _0
gather _*
gen year = real(substr(variable, -4, 4))
local value_name = ustrregexra(name1[1], ".[a-zA-Z_0-9\(\)]+", "", .)
rename value `value_name'
drop if `value_name' == ""
local label = 单位[1]
label var `value_name' "`label'"
drop variable name1 单位
rename (name2 name3) (prov_name city_name)
replace city_name = prov_name if (city_name == "")
destring, replace
save "$DT/国内生产总值.dta", replace

5. 批量文件处理

到这里,可能你会觉得太粗糙了些。是的,如果我们使用的变量不多时,一个个文件的处理也并非不可。但批量化、自动化的思维促使我们应该找到更简洁、智能的方式来提高效率。这里便可以使用 fsfilesearchdir 等命令获取目录下的所有文件名,然后再用 foreach 循环上面的单个文件的处理操作即可。

cd "$DR/"
fs "*.xlsx"
foreach xlsx in `r(files)' {
import excel "`xlsx'", sheet("我的数列") allstring clear
...
save "$DT/`value_name'", replace
}

6. 代码优化

如果你也用过 CEIC 数据,应该会说上面的代码是有局限的。是的,CEIC 数据库将变量描述、省级行政名称、地市行政名称均存储在首列,并通过 : 分隔。容易出现的问题是,不少数据的变量描述不止一个,还会有细分描述,比如下图右侧。通过 split 分列后,首列会产生四个新列。

因此,我们就不能只用新生成的第一列变量描述给变量命名了,需要将所有的变量描述作为变量名称。同样 rename (name2 name3) (prov_name city_name) 也会有问题,需要进一步调整。

我这里的做法是,先将新生成的 name1-3 的第一行提取至 value_name 暂元里,然后去掉地级市标记,也便可以只保留变量描述了,再通过 forvalues 循环,确定出 city_nameprov_name

* city_name/prov_name 重命名
forvalues i = 1/`count' {
if (name`i'[1] == "") {
cap rename name`i' city_name
}
else if (name`i'[1] == "地级市合计") | (name`i'[1] == "北京") {
cap rename name`i' prov_name
}
}

该部分完整代码如下:

cd "$DR/"
fs "*.xlsx"
foreach xlsx in `r(files)' {
import excel "`xlsx'", sheet("我的数列") allstring clear
drop B-D F-Z
* 第一行作为标签
labone, nrow(1)
* 使用标签为变量重命名
foreach v of varlist _all {
renvarlab `v', label
}
* 使用:分列
split _0, p(":") gen(name)
local count = `r(nvars)'
* r(nvars) r(varlist)
drop in 1
drop _0
local value_name = name1[1]+name2[1]+name3[1]
local value_name = ustrregexra("`value_name'", "地级市合计|北京", "", .)
local label = 单位[1]
* city_name/prov_name 重命名
forvalues i = 1/`count' {
if (name`i'[1] == "") {
cap rename name`i' city_name
}
else if (name`i'[1] == "地级市合计") | (name`i'[1] == "北京") {
cap rename name`i' prov_name
}
}
replace city_name = prov_name if (city_name == "")
* reshape long
gather _*
gen year = real(substr(variable, -4, 4))
rename value `value_name'
drop if `value_name' == ""
label var `value_name' "`label'"
drop variable name* 单位
destring, replace
save "$DT/`value_name'", replace
}

7. 合并多个文件

上面的操作可以使得下载的 15 个变量表批量转为 DTA 文件。接下来,需要将下载的所有文件合并为一张表。可以先使用 fs 先获取文件名,然后 foreach 循环 merge

cd "$DT/"
fs "*.dta"
use "国内生产总值.dta", clear
foreach dta in `r(files)' {
merge 1:1 city_name year using `dta', nogen
}
encode city_name, gen(cid)
xtset cid year
order cid year
save "$DF/ceic.dta", replace

8. 总结

CEIC 数据库的 Excel 插件可以实现在 Excel 里访问 CDMNext 网页进行数据的下载和更新。在使用这个功能之前,为了数据保持最新状态,常常需要重新下载文件,不仅浪费了时间,也使得本地存储了同一个文件的好多不同版本。配置好 Excel 插件后,我们在用到的时候只需要点击一下便能自动更新,还是很方便的。

9. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 清洗 local 循环, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:数据分享
    • Stata:CHFS中国家庭金融调查数据库清洗和处理-D121
    • 清洗CFPS:两步搞定中国家庭追踪调查数据清洗
    • Stata数据处理:清洗CFPS数据库
  • 专题:Stata教程
    • Stata编程:暂元,local!暂元,local!
  • 专题:Stata程序
    • Stata程序:暂元-(local)-和全局暂元-(global)
    • statsby: 不用循环语句的循环
  • 专题:Python-R-Matlab
    • Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。

连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章