Как мне создать локальный макрос 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}
Другие вопросы по тегам