一、软件要求
- python3
- Stata 17
- PyCharm
二、环境配置
2.1 stata基础配置
① stata激活
无论是MP版本,还是SE版本,都需要进行证书激活,即在stata安装目录下,存在LIC文件
② stata中配置python环境
-
检查stata中python状态,在命令窗口输入
python query
,并运行
-
配置python settings
– 设置python_exec
第一步:在stata命令窗口输入python search
,并运行:
第二步:选择任意一个python路径,在命令窗口运行set python_exec 路径
,如:set python_exec "C:\Users\caota\AppData\Local\Programs\Python\Python39\python.exe"
注意:路径最好用英文引号引起来
– 设置python_userpath(也可以不设置)
在stata安装路径中找到utilities文件夹路径,在命令窗口运行set python_userpath 路径
,如:set python_userpath "D:\Stata17\utilities"
注意:路径最好用英文引号引起来
2.2 python环境配置
这里需要导入Stata安装目录下的pystata模块,即将python_userpath
的路径导入到python中,代码如下:
## 需要在项目开始部分运行
import os,sys
## 设置pystata目录
BASE_DIR = r'D:\Stata17\utilities'
sys.path.append(BASE_DIR)
如果需要直接导入pystata,则需要将python_userpath
的路径设置添加到环境变量中,这里为了能在win和mac系统中通用,建议选择在项目中直接导入,不再设置环境变量。毕竟操作越多,出错概率越大。
三、python调用stata处理数据(基础版)
import os,sys
## 设置pystata目录
BASE_DIR = r'D:\Stata17\utilities'
sys.path.append(BASE_DIR)
def base_set():
# stata基础设置,因为模型数据和工程文件一般是确定的,因此在这里统一导入,txt中的数据与stata中do文件写法一致,每条语句写完之后需要换行
txt = """
cd "D:\学习工程\stata\data"
use "D:\学习工程\stata\data\mianban.dta"
spatwmat using usaww, name(wmatrix) standardize
xtset province year
spmat use usaww using usaww.spmat,replace
"""
return txt
def get_cmd():
cmd_list = [
(1, "x6 x8 x10 x11 x12,fe model(sem) emat(wmatrix) nolog effects type(time)"),
(2, "x4 x5 x6 x8 x9 x10 x11 x12,fe model(sdm) wmat(usaww) type(both) nolog effects"),
(3, "x6 x8 x10 x11 x12,fe model(sem) emat(wmatrix) nolog effects type(time)"),
(4, "x6 ,fe model(sem) emat(wmatrix) nolog effects"),
]
return cmd_list
def do_cmd(stata, cmd_list):
log_path = r"D:\学习工程\stata\log\result_" # 日志保存路径
for item in cmd_list:
num, cmd = item
"""
log_file_name 是日志别名
log_file_path 是日志保存路径
建议按照本文这种保存,这样可以将单个模型结果进行保存,方便后期查看
"""
log_file_name = f"result_{num}"
log_file_path = log_path + str(num)
try:
# 开始记录结果
stata.run(f"""
log using {log_file_path}, replace text name({log_file_name})
""")
except:
pass
try:
# 处理结果
stata.run(f"""
xsmle y x1 x2 x3 {cmd}
""")
except:
pass
try:
# 保存结果
stata.run(f"""
log close {log_file_name}
""")
except:
pass
def run():
os.makedirs(r"D:\学习工程\stata\log", exist_ok=True) # 创建日志文件夹
from pystata import config
# 初始化stata
# 根据Stata版本进行初始化,如果是se版本就是config.init('se'),如果是be版本就是config.init('be')
config.init('mp')
from pystata import stata
# 配置Stata
stata.run(base_set())
# 测试模型
do_cmd(stata, get_cmd())
if __name__ == '__main__':
run()
后记
stata中运行所需要的外部命令需要在stata中安装,否则模型运行将会出错
以上是python调用Stata的基础操作,还有很大的优化空间,欢迎补充~