Stata:如何快速合并 3500 个无规则命名的数据文件
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
🎦 效率分析 · 进阶 最新模型和工具
📅 2021 年 11 月 13-14;20-21 日
🔑 张宁教授 (山东大学);杜克锐副教授 (厦门大学)
🍓 课程主页:https://gitee.com/lianxh/TE
实现经济增长的途径主要有两个:一是增加投入,二是提高效率。后者不仅能增加经济总量,还能提升经济质量。因此,效率分析是经济学研究中的核心。
显然,若想发表高水平的论文,就必须紧跟前沿,引领趋势,这正是本期「效率分析·进阶班」课程的主旨。
张宁教授在环境效率和非期望产出领域学者中排名第二,他在 Science, Nature, Cell 和 Lancet 上均有发表。杜克锐副教授已在 SSC 发布了十余个 Stata 命令,有三篇论文发表于 Stata Journal,获得 2020 年 Stata 中国用户奖。
课程包括参数方法和非参数方法两个部分:
参数方法主要包括参数线性规划(Parametric LP)、计量经济方法和随机前沿方法(SFA)三大方法。 非参数方法,即 DEA 方法,主要包括 DDF, NDDF 和 SBM 等模型。
重要福利: 本课程所涉及的参数和非参数效率模型,老师们都将会提供封装后的 Stata 估计命令,只需几条简单的命令即可实现最新的模型。老师们也会分享编写过程心得,让大家有能力对这些封装程序进行修改和扩展。
扫码直达课程主页:
作者:连玉君 (中山大学)
E-Mail: arlionn@163.com
目录
数据合并专题
1. 问题背景
2. 解决思路
3. 采用循环语句将 turnover 变量转换为数值变量
4. 合并 3500 个数据文件
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
数据合并专题
专题:Stata入门 Stata小白系列之二:数据拆分与合并 专题:数据处理 Stata:数据合并与匹配-merge-reclink Stata: 如何快速合并 3500 个无规则命名的数据文件? multimport : 一次性导入并合并多个文件
1. 问题背景
(1) 在 idata 文件夹下存放了 3500 个个股日交易资料的 .dta 数据文件。这些文件采用公司代码命名,因此,并不连续(参见 图 1
);(2) 任务:(a) 部分文件中的 turnover
变量是文字型变量,需要使用destring
命令将其转换为数值变量;(b) 将这 3500 个数据文件纵向合并起来 (append);(3) 使用 forvalues
语句无法奏效,因为文件名对应的数字不连续;
2. 解决思路
(1) 使用 foreach
语句对无规则的文件名进行循环处理;(2a) 难点: 如何提取文件名到一个暂元或变量中? (2b) 对策: 使用 dir
命令以及暂元的高级功能,将dir
查询到的文件名存放到一个暂元s
中,随后在循环语句中从s
暂元中提取文件名;(3) 关键命令: 提取特定文件夹下的所有文件的名称到一个暂元 s
中,可以使用如下语句(详情参见help macro
,以及help extended_fcn
):
local s: dir "D:\data\idata'" files "*.dta", respectcase
命令含义:
执行如下语句可以在屏幕上呈现暂元 s
中存放的内容,如 图 3 所示:
. local s: dir "D:\data\idata'" files "*.dta", respectcase. dis `"`s'"'
)
3. 采用循环语句将 turnover 变量转换为数值变量
global d "D:\data\idata"cd "$d"local s: dir "`d'" files "*.dta", respectcaseforeach i in `s' { use "`i'", clear dis in red "ID = `i'" //可以不要,只是为了标示公司代码 destring turnover, replace force qui save "`i'", replace dis "." _c //屏幕打点,纯属娱乐}
4. 合并 3500 个数据文件
4.1 方法1:使用 foreach 语句
使用 append
命令可以合并纵向合并文件中的 3500 个文件,但有一个棘手的问题:使用 append
命令时,必须先将第一份数据调入内存,然后将剩余的 3499 份文件追加到这份文件的尾部。
然而,我们的数据文件名称是没有特定规则的,这就需要采用一种自动提取文件名的机制。此时,可以使用 gettoken
或 tokenize
命令对暂元 s
进行切割,其包含的第一个单词就是第一个文件的名称。这里以 gettoken
为例进行说明。
gettoken 的用法
local a "Jack Rose Make Love" gettoken s1 s2: a, parse(" ") dis "`s1'" dis "`s2'"
结果如下:
. dis "`s1'"Jack
. dis "`s2'" Rose Make Love
可见,gettoken
的作用是将暂元 a
的内容按照我们的要求以空格 (parse(" ")
的作用) 为切割点,分成两部分,第一空格之前的部分存入暂元 s1
,剩余部分存入暂元 s2
。
合并数据的命令
* 4.1 方法1:使用 foreach 语句 local s: dir "$d" files "*.dta", respectcase gettoken f1 frest: s, parse(" ") dis "`f1'" //第一个文件的名称 dis `"`frest'"' //其他文件的名称
use "`f1'", clear foreach i of local frest { append using `i' } save "D:\data\idata_all01.dta", replace //保存合并后的数据
4.2 方法2:使用外部命令 openall
若使用外部命令 openall
,则上述繁杂的处理过程会简化成一条极其简洁的语句:
cd "D:\data\idata" // 将要合并该文件夹下的所有文件 openall * // 纵向合并当前工作路径下的所有文件 save "D:\data\idata_all02.dta", replace //保存合并后的数据
可以使用如下命令安装外部命令 openall
:
ssc install openall, replace
详细语法格式参见:help openall
。
有兴趣的话,你可以对比一下上述两份最终文件是否有差异。
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。