Python调用Stata

一、软件要求

  • 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的基础操作,还有很大的优化空间,欢迎补充~

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值