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

发布时间:2022-04-14 阅读 2804

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

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


目录


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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh