如何在python中创建stata本地宏?

如何在python中创建stata本地宏?,python,stata,Python,Stata,让我编辑我的问题以澄清。以下是python代码: decade_begin = 1970 while decade_begin <= 1994: for x in range(0, 10): a= decade_begin + x decade_begin = a+1 decade_end=a print "year_",decade_begin,"s" #start year 我希望能够创建一个变量,以便: year_1990s = [a]

让我编辑我的问题以澄清。以下是python代码:

decade_begin = 1970

while decade_begin <= 1994:
    for x in range(0, 10):
        a= decade_begin + x
    decade_begin = a+1
    decade_end=a

print "year_",decade_begin,"s" #start year 
我希望能够创建一个变量,以便:

year_1990s = [a]
在stata中,使用本地宏“x”非常容易。但在python中,我认为在变量名中混合使用字符串和int是不允许的

forval i = 1979/1994 {
whatever if year == `i' 
save year_`i'.dta, replace
}

有关于如何在python中实现的想法吗?

类似这样的想法大致相当于:

for x in ["apple", "banana", "orange"]:
    with open(x + ".data", "w") as outfile:
        outfile.write("whatever")

如果我理解正确,您希望使用字符串命名变量来创建变量名。(Stata中相当于本地宏的变量在Python中称为变量)。您可以使用
exec
功能执行此操作:

>>> for i in range(1979, 1995):
...    exec("name_" + str(i) + " = " + str(i))

>>> print(name_1994)
1994
此代码假定您使用的是Python 3。如果您使用的是Python 2,请删除带有
exec
print
的行的外圆括号

但是,在Python中使用
exec
并不是解决此问题的最佳方法(如前所述)。如果您尝试用Python编写代码,就像用Stata编写代码一样,那么以后可能会遇到问题

更好的方法可能是创建一个字典,并为每个数字使用不同的键。例如:

>>> names = {}
>>> for i in range(1979, 1995):
...    names[i] = i
>>> print(names)
{1979: 1979, 1980: 1980, 1981: 1981, 1982: 1982, 1983: 1983, 1984: 1984, 1985: 1985, 1986: 1986, 1987: 1987, 1988: 1988, 1989: 1989, 1990: 1990, 1991: 1991, 1992: 1992, 1993: 1993, 1994: 1994}

对于那些熟悉Python但不熟悉STATA的人,您能解释一下“x”的作用吗?你是说像这样的东西吗?我想它在STATA中被称为本地宏。我找到的最简单的解释是:它被称为本地宏。这在源代码中非常明确,但我怀疑了解Stata[NB]术语是否有助于回答python问题,这是一个如何循环列表的问题。仍然不确定这个问题是关于还是(但可能不是关于循环或文件访问)。
>>> names = {}
>>> for i in range(1979, 1995):
...    names[i] = i
>>> print(names)
{1979: 1979, 1980: 1980, 1981: 1981, 1982: 1982, 1983: 1983, 1984: 1984, 1985: 1985, 1986: 1986, 1987: 1987, 1988: 1988, 1989: 1989, 1990: 1990, 1991: 1991, 1992: 1992, 1993: 1993, 1994: 1994}