Python中Stata宏的等价物

Python中Stata宏的等价物,python,pandas,stata,statsmodels,stata-macros,Python,Pandas,Stata,Statsmodels,Stata Macros,我正在尝试使用Python进行统计分析 在Stata中,我可以定义本地宏并根据需要展开它们: program define reg2 syntax varlist(min=1 max=1), indepvars(string) results(string) if "`results'" == "y" { reg `varlist' `indepvars' } if "`results'" == "n" { qui reg `var

我正在尝试使用Python进行统计分析

在Stata中,我可以定义本地宏并根据需要展开它们:

program define reg2
    syntax varlist(min=1 max=1), indepvars(string) results(string)
    if "`results'" == "y" {
        reg `varlist' `indepvars'
    }
    if "`results'" == "n" {
        qui reg `varlist' `indepvars'
    }
end

sysuse auto, clear
因此,不是:

reg2 mpg, indepvars("weight foreign price") results("y")
我可以做到:

local options , indepvars(weight foreign price) results(y) 
reg2 mpg `options'
甚至:

local vars weight foreign price
local options , indepvars(`vars') results(y) 
reg2 mpg `options'
Stata中的宏帮助我编写干净的脚本,而无需重复代码

在Python中,我尝试了字符串插值,但在函数中不起作用

例如:

def reg2(depvar, indepvars, results):
    print(depvar)
    print(indepvars)
    print(results)
以下各项运行良好:

reg2('mpg', 'weight foreign price', 'y')
然而,这两种方法都失败了:

regargs = 'mpg', 'weight foreign price', 'y'
reg2(regargs)

regargs = 'depvar=mpg, covariates=weight foreign price, results=y'
reg2(regargs)
我发现了一个类似的问题,但它没有回答我的问题:

对于R,还有另一个问题:

然而,我找不到专门针对Python的任何东西


我想知道Python中是否有类似于Stata宏的东西

看起来您只需要调用函数的
*
**
操作符:

regargs = 'mpg', 'weight foreign price', 'y'
reg2(*regargs)
使用
*
将列表或元组展开为位置参数,或使用
***
将字典展开为关键字参数,以满足函数的需要

对于关键字示例,您需要稍微更改声明:

regargs = dict(depvar='mpg', covariates='weight foreign price', results='y')
reg2(**regargs)

Stata中的字符串宏与外部有点偏心。Stata和许多其他语言一样,是基于对以前语言的折衷借用加上一些原创思想。在本例中,如果我理解正确的话,灵感来自于C和Unix shell编程的混合。您对我如何在python中实现类似的功能有什么想法吗?请参阅我的答案。抱歉花了这么长时间。感谢您的详细说明,我现在已将已接受的答案更改为您的答案。我一定会研究Pyexpander,我最终使用了一个列表,正如您在这里所建议的。