Python中Stata宏的等价物
我正在尝试使用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
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)
我发现了一个类似的问题,但它没有回答我的问题:
我想知道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,我最终使用了一个列表,正如您在这里所建议的。