Как мне создать локальный макрос stata в python?
Позвольте мне отредактировать мой вопрос, чтобы уточнить. Вот код 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 я думаю, что смешивание строки и int в имени переменной не допускается.
forval i = 1979/1994 {
whatever if year == `i'
save year_`i'.dta, replace
}
Любые идеи о том, как реализовать в Python?
2 ответа
Примерно так это грубый эквивалент:
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
,
С помощью exec
Однако, это не лучший способ решения этой проблемы в Python (как описано здесь). Скорее всего, вы столкнетесь с проблемами позже, если попытаетесь кодировать на 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}