stata在数据处理与分析方面具有一定的优势,而且软件又小,在配置一般的PC机里运行也较为流畅。
#1.另外保存do文件,在python中运行外部do文件
import subprocess
import codecs
import os
stata_path="C:\\Program Files (x86)\\Stata14\\StataMP-64.exe"
dofile_path="C:\\Users\\jack\\PycharmProjects\\201803\\dofile.do"
# # stata程序名称为"StataMP-64.exe"
cmd = [stata_path, "doedit", dofile_path]
subprocess.call(cmd)
# 2.有时会遇到改变do文档内容的情形,因此需要在python中写一个do文档
varstr='price length weight'
code='''clear all
sysuse auto
sum
reg '''
statacode=code+varstr
with codecs.open('dofile_2.do','w',encoding='utf-8') as f:
f.write(statacode)
f.close()
cmd = [stata_path, "do", dofile_path]
subprocess.call(cmd)
# 关闭stata
os.system('TASKKILL /F /IM StataMP-64.exe')
#3. 在python和stata中传递数据(最容易想到的一个思路是将要传递的内容保存下来,然后python或stata再读取数据)
# 以stata向python传递数据为例
# 首先生成一个stata数据
sysuse auto,clear
keep price
export delimited price using "statatest.txt", delimiter(tab) novarnames replace
# python读取数据
import codecs
with codecs.open('statatest.txt','r',encoding='utf-8') as f:
data=f.readlines()
f.close()
print(data)
import re
# 读取的数据包含空格和换行,通过正则表达式提取数据
datamatch=re.compile('[\d]*')
data2=list()
import re
for s in data:
s=re.match(datamatch,s).group()
data2.append(s)
print(data2)
PS:
github上有一个ipystata的包可以通过Jupyter在python中使用stata(https://github.com/TiesdeKok/ipystata),或者可以参考这篇文章(https://zhuanlan.zhihu.com/p/22645950)