👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:最新专题 | 计量专题 | 关于连享会
🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)
课程特色 · 2024空间计量:
👉 一、从“零基础”到“高水平”的课程设计
兼顾基础知识、主流模型与前沿模型 既考虑软件安装、程序编写以及空间权重矩阵设计等 基础知识 讲授,更强调时空面板地理加权回归模型、贝叶斯空间计量模型、矩阵指数模型、空间计量交互模型与空间面板似不相关回归模型等 前沿模型 的传授。
👉 二、“保姆级”的空间计量代码
编写与校准所有模型的MATLAB代码,简化实操环节 模型的估计与检验等 仅按照提供的Excel数据版式 搜集与整理原始数据,即可一次性出结果并作图。
👉 三、“最多上新” 的内容体系
新增 矩阵指数模型、短面板空间似不相关模型、空间计量交互模型、贝叶斯空间计量模型等 新增 前沿应用案例,包括空间计量与索洛余值法、随机前沿分析与数据包络分析等的互嵌研究,阐释基于空间计量的产业空间结构优化评价方法。 新增 Dagum空间基尼系数、核密度估计、空间马尔科夫链与空间收敛性等内容,阐释现实研究中对空间收敛性的应用“谬误”。
作者:初虹 (微信公众号-虹鹄山庄)
邮箱:chuhong@mail.sdufe.edu.cn
目录
1. CSMAR Stata API
1.1 初始配置
1.2 CSMAR-STATA
2. 下载财务报表数据
3. 循环解压缩
4. Stata 读取数据并加标签
5. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
这段时间在用上市公司数据,常苦于各类财务指标繁杂且分散,下载起来也颇费周章。CSMAR API 的出现在很大程度上简化了数据的下载过程——基本不用在 CSMAR 网站点点选选,数据下载也能纳入代码管理的范畴。
CSMAR 数据库 (China Stock Market & Accounting Research Database) 作为经济金融领域的知名数据库,对于公司和宏观经济研究者而言,是重要的数据来源。到目前为止,CSMAR 涵盖 18 大系列,包含 160+个数据库、4000 多张表、5 万多个字段,支持导出 Excel、CSV、TXT 等多种文件格式。
运行文中代码需要事先安装的软件及相关第三方命令:
软件:Stata 16+; 插件:CSMAR-STATA; 命令: cd
、copy
、shell
、erase
、local
、global
、unzipfile
、ustrregexra
、capture
、subinstr
、substr
、merge
、real
、mvfiles
、del
、fs
、filesearch
等。
1. CSMAR Stata API
CSMAR API 提供了 Python、R、MATLAB 和 Stata 四种接口,为我们从 CSMAR 上下载数据提供了极大的便利性。在本文中,笔者将以 Stata 为例、介绍 CSMAR API 的使用,其他软件的 API 调用方法请移步 CSMAR 官网。CSMAR Stata API 是基于 Java 语言开发的 Stata 插件 (目前仅支持 Windows 系统),通过调用插件相关方法来实现 CSMAR 数据库的数据查询、筛选、下载等功能。
1.1 初始配置
软件前提:Windows 系统和 Stata 16+
插件安装:CSMAR-STATA
首先,下载「CSMAR-STATA」压缩包,并将解压得到的所有文件复制到 personal 文件夹 (具体位置可通过 sysdir
命令查看);然后,运行 run.bat 文件。
1.2 CSMAR-STATA
用户登录:login "account" "pwd"
account
:用户名/已验证电话/已验证邮箱;pwd
:密码。
注意:这里登录的账号,必须是个人账号,不能使用机构账号。
设置语言:setLanguage "lang"
中文 CH
,英文EN
;如不设置语言则默认中文。
查看已购买的数据库名称:getDbs
查看已购买的数据表名称:getTables "databaseName"
databaseName
:数据库名称,可通过getDbs
获得。
查看已购买数据表中所有的字段:getFields "tableName"
tableName
:表名称,可通过getTables "databaseName"
获得。
预览数据:preview "tableName"
tableName
:表名称,可通过getTables "databaseName"
获得。
查询已购买的数据表记录条数:getDataCount "columns" "condition" "tableName" "startTime" "endTime"
columns
:字段列表;condition
:条件,类似 SQL 条件语句;tableName
:表名称,可通过getTables "databaseName"
查看;startTime
和endTime
:下载数据时间区间的开始时间和结束时间。
查询已购买的数据表数据:getData "columns" "condition" "tableName" "startTime" "endTime"
一次最多只能加载 20 万条记录; condition
:如超过 20 万记录的数据可使用limit
进行分页查询。假设是 40 万条,需分两次进行条件设置:第一次: "Stkcd like'3%' limit 0, 200000"
;第二次: "Stkcd like'3%' limit 200000, 200000"
。
打包数据:pack "columns" "condition" "tableName" "startTime" "endTime"
该命令返回一个唯一标识:signCode。
获取 Stata 下载记录详情:getRecord "signCode"
signCode
是通过调用pack
命令获取,非必填,为空时返回所有通过 Stata 下载的记录。
下载数据:copy "sourcePath""targetPath"
sourcePath
:文件来源路径通过getRecord "signCode"
中的 filepath 获得;targetPath
:文件存放路径。
2. 下载财务报表数据
登录个人账号,进入财务报表数据库,查看要下载的数据表名称。
. clear all
. login "account" "pwd" // 登录个人账号和密码
. getDbs // 查看学校已购的数据库列表
. getTables "财务报表" // 查看财务报表数据库里的所有数据表
打包下载资产负债表 2007-2021 年度合并报表中的部分变量。
. * 资产负债表
. getFields "FS_Combas"
. pack "Stkcd,Accper,Typrep,A0b1103000,A001101000,A001111000,A001123000,A001212000,A001000000,A002108000,A002000000" ///
> "Typrep = 'A' AND Accper like '20%-12-31'" "FS_Combas" "2007-12-31" "2021-12-31"
In the process of packaging, you can check the packaging progress through the identification code,
which is [948722605518524416]
. getRecord "948722605518524416" // 需要替换成最新的 identification code
. list filePath
+---------------------------------------------------------------------------+
| filePath |
|---------------------------------------------------------------------------|
| http://file.csmar.com/group1/M00/31/E4/CuIKV2IfkEOAeevrACBAoTd_hEM170.zip |
+---------------------------------------------------------------------------+
由上表可知,filePath 变量就是数据的下载路径,通过 copy
命令下载即可。
. local filePath = filePath[1]
. copy "`filePath'" "资产负债表.zip", replace
同样的方式,下载利润表和现金流量表 (间接法) 2007-2021 年度合并报表中的部分变量。
. * 利润表
. getFields "FS_Comins"
. pack "Stkcd,Accper,Typrep,B001101000,Bbd1102101,Bbd1102203,B001211000, B001300000,B001000000,B002000000" ///
> "Typrep = 'A' AND Accper like '20%-12-31'" "FS_Comins" "2007-12-31" "2021-12-31"
In the process of packaging, you can check the packaging progress through the identification code,
which is [948727703359492096]
. getRecord "948727544793829376"
. local filePath = filePath[1]
. copy "`filePath'" "利润表.zip", replace
. * 现金流量表
. getFields "FS_Comscfi"
. pack "Stkcd,Accper,Typrep,D000101000,D000117000,D000102000,D000103000,D000104000,D000105000,D000106000" ///
> "Typrep = 'A' AND Accper like '20%-12-31'" "FS_Comscfi" "2007-12-31" "2021-12-31"
In the process of packaging, you can check the packaging progress through the identification code,
which is [948727707524435968]
. getRecord "948727659394797568"
. local filePath = filePath[1]
. copy "`filePath'" "现金流量表间接法.zip", replace
3. 循环解压缩
. fs *.zip
. foreach i in `r(files)' {
2. unzipfile "`i'", replace
3. }
4. Stata 读取数据并加标签
通过 API 下载的 CSV 文件里没有标签信息,可以根据同名 TXT 文件里的信息为变量加标签。在这里,我们将 TXT 文件里括号中的信息作为变量标签,并使用正则表达式将每行字段批量改成 label var varName "varlabel"
的形式。
. filesearch "*].txt", local(txtfiles)
. foreach txt of local txtfiles {
2. import delimited using "`txt'", clear
// 去掉部分标签里的括号,其括号里有双引号
3. replace v1 = ustrregexra(v1, "\(.*\)", "", .)
4. replace v1 = ustrregexra(v1, "\(.*\)", "", .)
// 在每行最前面加入 "label var "
4. replace v1 = ustrregexra(v1, "^", "label var ", .)
// 将每行的 "[" 去掉
6. replace v1 = ustrregexra(v1, "\[", "", .)
// 将每行的 "]" 及后面所有的字符去掉
7. replace v1 = ustrregexra(v1, "\].*", "", .)
8. local txt: subinstr local txt ".txt" ".do", all
9. export delimited using "`txt'", replace novarnames
10. }
接下来,将 CSV 文件循环导入 Stata 并加标签,下图是对应结果。
. filesearch "*.csv", local(csvfiles)
. foreach csv of local csvfiles {
// CSV 文件批量导入 Stata
2. import delimited using "`csv'", case(preserve) clear
3. cap local csv: subinstr local csv ".csv" "", all
// 批量加标签
4. quietly{
5. cap do "`csv'[DES][csv]".do
6. }
7. save "`csv'.dta", replace
8. }
接下来,删除临时文件 (CSV、TXT、DO),保留 DTA 文件。
. filesearch "*.csv", local(csvfiles)
. foreach csv of local csvfiles {
2. !del `csv'
3. }
. filesearch "*.txt", local(txtfiles)
. foreach txt of local txtfiles {
2. !del `txt'
3. }
. filesearch "*.do", local(dofiles)
. foreach do of local dofiles {
2. !del `do'
3. }
常出现的问题/注意点:
使用时,浏览器必须保持登录个人账号,否则会出现 No permission to access.r(5100);
的问题;getFields "FS_Combas"
查询资产负债表所有字段的时,会出现r(198)
的错误,但是并不影响pack
或getData
,可以忽略此错误,接着运行即可。
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh api csmar, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:Stata教程 Stata-Python交互-6:调用APIs和JSON数据 专题:数据处理 Stata数据处理:通过API获取经济数据 专题:空间计量 Stata:我和她离多远?基于百度地图API的地理距离计算 专题:Python-R-Matlab Python:爬取上市公司公告-Wind-CSMAR Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化 Python 调用 API 爬取百度 POI 数据 Python 调用 API 进行逆地理编码 Python 调用 API 进行地理编码
🍓 课程推荐:2024 空间计量专题
主讲老师:范巧 (兰州大学)
课程时间:2024 年 10 月 2-4 日 (三天)
课程咨询:王老师 18903405450(微信)
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。