从各种数据库中下载下来.csv文件后,这些文件往往都会存在1998-2019等多个文件夹中。而且这些.csv文件都是以中文命名的没有规律的文件。而处理数据往往是要对这整个面板数据处理的。因此,如何合并成一个数据文件就成为了一个难题。
解决思路与难点
解决思路
使用循环语句对各个文件夹进行处理。并将处理好的文件存储到一个新文件夹内。然后再将这个文件夹内的所有数据合并为一个.dta文件。
难点
如何通过命令进入各个文件夹以及如何快速合并各个文件夹内的.csv据。
对策
使用rcd
获取文件夹的信息。并存储到暂元中
使用openall
合并.csv或.dta文件。
使用cd
进入各个文件夹中
参见help rcd
,help openall
,help cd
若有命令stata提示未安装,可使用ssc install openall
命令进行安装。
代码的实现
代码
qui rcd
local k = 1997 //当前文件夹
forvalues i = 1(1)`r(tdirs)'{
cd `c(sysdir_personal)'TFP\example
qui rcd
cd "`r(ndir`i')'"
openall *,insheet //合并当前文件数据
local k = `k' + 1
dis `k' //作者本人为了方便查看代码运行结果
cd `c(sysdir_personal)'TFP\data //将文件全部保存至data
save `k'.dta ,replace //保存为.dta文件,以年份命名
clear
}
代码的详细介绍
qui rcd
是获取当前文件夹下所有文件的目录。运行此命令后,结果如下
使用
return list
命令查看存储如图可以看到暂元
r(tdirs)
中存储的是共有多少个文件夹.暂元
r(ndiri)
中存储的是各个文件夹的路径名。openall *,insheet
是合并当前文件夹下的所有.csv文件。如果不加option选项insheet
则是合并所有.dta文件。
注意在循环语句中也是要用
rcd
命令重新获取当前文件的路径。否则循环一次便会进入data路径内。
且每个读者需自行选择进入那个文件夹以适配自己的需要。