让我编辑我的问题以澄清。这是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_1980s
year_1990s
我希望能够创建一个变量:
year_1990s = [a]
在stata中,使用本地宏“x”非常简单。但是在python中我认为不允许在变量名中混合使用string和int。
forval i = 1979/1994 {
whatever if year == `i'
save year_`i'.dta, replace
}
关于如何在python中实现的任何想法?
答案 0 :(得分:1)
这样的事情大致相当:
for x in ["apple", "banana", "orange"]:
with open(x + ".data", "w") as outfile:
outfile.write("whatever")
答案 1 :(得分:0)
如果我理解正确,您希望使用字符串创建变量名来命名变量。 (相当于Stata中的本地宏在Python中称为变量)。您可以使用dt3 <- data.table(Times = c( '10:30:45.58', '10:30:45.93','10:30:45.104','10:30:45.127','10:30:45.188','10:30:45.188','10:30:45.212','10:30:45.231','10:30:45.231' ),
Midquote = c('5.319','5.323', NA,'5.322','5.325', NA, NA,'5.321','5.321'))
# Option 1 - create an id column on the fly (unfortunately data.table recalculate .I after evaluating the "where" clause... so you need to save it)
dt3[, cbind(.SD, id=.I)][ Times != Times[.N] & !is.na(Midquote), max(id) ]
[1] 5
# Option 2 - simply check the last position of where your condition is met
dt3[, max(which(Times != Times[.N] & !is.na(Midquote))) ]
[1] 5
# Option 3 - good luck with this
nrow(dt3[Times != Times[.N] & !is.na(Midquote)])
[1] 4
功能执行此操作:
exec
此代码假定您使用的是Python 3.如果您正在使用Python 2,请删除>>> for i in range(1979, 1995):
... exec("name_" + str(i) + " = " + str(i))
>>> print(name_1994)
1994
和exec
行的外括号。
然而,使用print
并不是在Python中解决此问题的最佳方法(如here所述)。如果您尝试使用与用于在Stata中编码相同的方式编写Python代码,则稍后可能会遇到问题。
更好的方法可能是创建字典并为每个数字使用不同的密钥。例如:
exec