自动获取和展示中国宏观杠杆率数据

句号 G.E.M. 邓紫棋 - 摩天动物园

这是 TidyFriday 社区推出的第一篇 Stata 的教程,为了吸引大家对 Stata 的兴趣,先不从最基础的讲,而是讲述一个使用 Stata 提高研究效率的案例。

国家资产负债表研究中心 CNBS 会在他们的服务器上定期推出 中国宏观杠杆率数据[1],是下面这个样子的:

在左下角有个数据下载按钮,点击就可以下载数据了,下载链接为:http://114.115.232.154:8080/handler/download.ashx ,下载之后会得到这个 xlsx 文件,这个文件的内容是这样的:

如果我们经常需要用这个数据,然后每次要用的时候都要打开这个网站下载,而且这个网站的网址还是个 IP 地址,谁记得住啊!所以如果我们能写个小程序自动获取然后整理好这个数据,最好再配个画图的功能。

那么我们先用 Stata 完成下载数据、整理数据、图表绘制这三个操作:

下载和整理数据

注意这个年份实际上是个月份变量:

/* 清空内存 */clear all/* copy 命令可以用于文件下载、复制粘贴 */copy "http://114.115.232.154:8080/handler/download.ashx" "CNBS中国杠杆率数据.xlsx", replace/* import excel 命令用于导入 EXCEL 数据 */import excel "CNBS中国杠杆率数据.xlsx", sheet("Data") firstrow clear/* 删除没用的列 */drop J K L/* 删除第一行:英文变量名 */drop in 1/* 把所有能转换成数值型变量的变量都转换成数值型变量 */destring, replace/* 把年份转换成日期型变量,date() 函数生成的数是从 1960 年 1 月 1 日开始计算的天数 */gen date = date(年份, "DMY")/* 把 date 变量放在第一列 */order date/* 把 date 变量转换成 年-月-日 的格式 */format date %tdCY-N-D/* 删除没用的年份变量 */drop 年份/* 生成一个月份变量 */gen 月份 = mofd(date)/* 月份变量的格式:年-月 */format 月份 %tmCY-N/* 把月份放在第一列 */order 月份/* 删除没有用的 date 变量 */drop date/* 给月份变量添加一个赋值标签 */label var 月份 "数据月份"

整理好的数据是这样的:

然后我们在画个图把这些数据展示出来:

/* 安装绘图主题 */ssc install blindschemes, replace all/* 设定 plotplain 为默认绘图主题 */set scheme plotplain, permanently/* 绘图 */tw ///line 居民部门 非金融企业部门 政府部门 中央政府                  ///     地方政府 实体经济部门 金融部门资产方 金融部门负债方 月份,     ///     lp(solid solid solid solid solid solid solid solid) ///     lc("166 206 227" "031 120 180"  "178 223 138"       ///        "051 160 044"  "251 154 153" "227 026 028"       ///        "253 191 111"  "255 127 000") xti(日期)            ///     note("数据来源:国家资产负债表研究中心(CNBS)")              ///     ti(中国各部门宏观杠杆率趋势)

这样我们就完成了刚刚设想的整个流程,下面就是本文的重点了,就是如何编写一个 Stata 命令,把上面这个流程整合进去,让以后我们想调用这个数据的时候,一条命令就完成!

我们先写一个最简单的 Stata 命令:

program def myprog    di "Hello, World!"end

把这个程序保存为一个 myprog.ado 文件,然后放在当前工作目录下,然后就可以调用了:

myprog*> Hello, World!

那么对于本案例,我们可以编写一个这样的 ado 文件:

*! 自动获取和展示中国宏观杠杆率数据*! 程振兴 2019年4月1日*! 中国宏观杠杆率数据:http://114.115.232.154:8080/*! 示例:cmlrd*!          cmlrd, plotcap program drop cmlrdprogram define cmlrd    syntax [, plot]    di "获取数据中···"    qui copy "http://114.115.232.154:8080/handler/download.ashx" "CNBS中国杠杆率数据.xlsx", replace    di "数据来源:国家资产负债表研究中心(CNBS)"    qui{        import excel "CNBS中国杠杆率数据.xlsx", sheet("Data") firstrow clear        drop J K L        drop in 1        destring, replace        gen date = date(年份, "DMY")        order date        format date %tdCY-N-D        drop 年份        gen 月份 = mofd(date)        format 月份 %tmCY-N        order 月份        drop date        label var 月份 "数据月份"    }    if "`plot'" != ""{        tw line 居民部门 非金融企业部门 政府部门 中央政府 ///        地方政府 实体经济部门 金融部门资产方 金融部门负债方 月份, ///        lp(solid solid solid solid solid solid solid solid) ///        lc("166 206 227" "031 120 180"  "178 223 138"  "051 160 044"  "251 154 153" "227 026 028"  "253 191 111"  "255 127 000") xti(日期) ///        note("数据来源:国家资产负债表研究中心(CNBS)") ///        ti(中国各部门宏观杠杆率趋势)    }end // end of program cmlrd

这里涉及了一些 Stata 编程的 Tips:

1.*! 是一种特殊的注释,当你运行 which cmlrd 查找 cmlrd 命令的时候,这些注释会同时被打印出来,例如:

which cmlrd/Users/czx/Library/Application Support/Stata/ado/personal/c/cmlrd.ado *!

自动获取和展示中国宏观杠杆率数据 *! 程振兴 2019年4月1日 *! 中国宏观杠杆率数据:http://114.115.232.154:8080/ *! 示例:cmlrd *! cmlrd, plot

2.qui 是 quietly 的缩写,可以隐藏程序运行过程中的输出信息;

3.cap 是 capture 的缩写,可以在运行出错的时候自动跳过该程序;

4.syntax [, plot] 里面 plot 是我设定的选项,用 syntax [, PLOT] 的效果也是一样的,大写部分表示可以缩写。如果我这里使用的是 syntax [, Plot],那就表明 plot 选项可以缩写为 p

使用 cmlrd

这个命令只有两个用法:

1.cmlrd:获取数据但是不绘图;2.cmlrd, plot:获取数据然后绘图。

全局使用 cmlrd

为了以后能够直接使用 cmlrd 命令,我们可以把这个 ado 文件放在系统文件夹里,运行下面的命令查看系统文件夹的位置:

sysdir*>    STATA:  /Applications/Stata/*>     BASE:  /Applications/Stata/ado/base/*>     SITE:  /Applications/Stata/ado/site/*>     PLUS:  /Users/czx/Library/Application Support/Stata/ado/plus/*> PERSONAL:  /Users/czx/Library/Application Support/Stata/ado/personal/*> OLDPLACE:  ~/ado/

推荐放在 PERSONAL 文件夹里。Windows 用户可以按 Win + R 键将 PERSONAL 的路径粘贴进去回车打开这个文件夹,Mac 用户可以直接运行下面的命令打开 PERSONAL 文件夹:

!open '/Users/czx/Library/Application Support/Stata/ado/personal/'

打开这个文件夹之后,把 cmlrd.ado 文件放在名为 c 的子文件夹里。Windows 用户也这样。

然后你就可以随时使用 cmlrd 命令了!

是不是觉得 Stata 也蛮有趣的!

References

[1] 中国宏观杠杆率数据http://114.115.232.154:8080/

(0)

相关推荐