Python与Stata交互——用Python写Stata代码(os模块的应用):以清洗NCDC数据为例

本文介绍了如何使用Python的os模块处理Stata无法识别的无后缀文件,通过添加.csv后缀并生成Stata循环代码来清洗分布在多个文件夹中的大量数据。这种方法避免了手动操作的繁琐,提高了数据清洗效率。
摘要由CSDN通过智能技术生成

Python与Stata交互——用Python写Stata代码(os模块的应用):以清洗NCDC气象数据为例


Stata是计量经济学的最有名的软件,但是其自身存在一些缺陷,特别是,在清洗数据的时候,会显得比较笨重。此时,通过Python的os模块,可以自动生成Stata代码,从而提高效率。此文通过一个亲身经历的案例来对此进行说明。

问题和基本思路

问题

在用Stata清洗数据的时候,往往会碰到如下问题:

  1. 原始数据文件不一定是Stata所能识别的文件类型
    这需要利用Python将Stata不可识别的文件类型转成其可识别的文件类型。我遇到的情况是,原始数据文件没有后缀,这使得该文件类型显示为“文件”。这种没有后缀名的文件,可以用记事本打开,但是无法用Stata进行读取。这时候需要给各个文件加上后缀。加后缀的工作可以手动,但是往往会因为问题2而望而却步。
  2. 原始数据分散在不同的文件夹、一个文件夹里有多个原始数据文件
    我清洗的数据,原始数据散落在47个文件夹,而且每个文件夹里面有几百个原始数据文件。虽然Stata有强大的循环语句,但是需要提前定义循环所用的“域”(比如,从1到10循环)。如果散落在各个文件夹中的数据文件的名称统一的或存在一定规律,那么可以直接手动把这个“域”用global定义出来。然而,散落在每文件夹中的数据文件名称并不统一。因此,这个时候并不适合手动,而需要求助其他工具。Python的os模块可以找出目录下的文件夹的名称以及文件的名称,并可以对其进行重命名等操作,因此,我们可以借助它来自动生成Stata代码(关键是生成“域”)。

基本思路

对于每一个文件夹里的数据集,需要先给它们加上后缀,然后进行如下的Stata里的循环代码:

cd "文件夹的路径"
global sites a b c ... [循环域里面所有元素]
foreach i of global sites {
    import delimited `i'.csv, encoding(Big5) clear
    gen site=`i'
    save `i'.dta, replace
}
foreach i of global sites {
    append using `i'.dta
}
duplicates drop site v1, force
save "保存目录\保存文件名", replace

这里的关键是找到[循环域里面所有元素],即每个文件夹里面的所有数据文件的名称。

代码和结果

给文件加上后缀(这里加的是.csv)和生成Stata代码的Python代码如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值