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

时间:2016-11-21 20:53:27

标签: 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_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中实现的任何想法?

2 个答案:

答案 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