2016-11-21 3 views
1

Lassen Sie mich meine Frage zu klären. Hier ist der Python-Code:Wie erstelle ich ein Stata lokales Makro in 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 

Der Ausgang der letzten Zeile ist:

year_1980s 
year_1990s 

Ich möchte eine Variable erstellen können, so dass:

year_1990s = [a] 

In Stata dieser ist ziemlich einfach, mit einem lokalen Makro `x '. Aber in Python denke ich, dass das Mischen von String und int in einem Variablennamen nicht erlaubt ist.

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

Irgendwelche Ideen zur Implementierung in Python?

+0

Für diejenigen, die vertraut mit Python, aber nicht mit STATA, könnten Sie erklären, was 'x 'tut? Meinst du etwas wie [Format Literale] (http://stackoverflow.com/documentation/python/1019/string-formatting/4021/format-literals#t=201611212058243848285)? –

+0

Ich denke, es heißt ein lokales Makro in STATA. Die einfachste Erklärung, die ich gefunden habe, ist hier: https://www.ssc.wisc.edu/sscc/pubs/stata_prog1.htm – Carla

+0

Es ** wird ** ein lokales Makro genannt. Das ist ziemlich explizit an der Quelle http://www.stata.com/help.cgi?foreach Aber ich bezweifle, dass die Kenntnis der Stata [NB] -Technologie hilft, die Python-Frage zu beantworten, bei der es sich um eine Frage handelt, wie man eine Liste durchläuft. –

Antwort

1

So etwas ist eine grobe Entsprechung:

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

Wenn ich richtig verstehe, möchten Sie einen Variablennamen nennen Sie die Variable mit einem String erstellen. (Das Äquivalent von lokalen Makros in Stata wird in Python als Variable bezeichnet). Sie können dies die exec Funktion tun:

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

>>> print(name_1994) 
1994 

Dieser Code setzt voraus, Sie Python verwenden 3. Wenn Sie Python verwenden 2, mit exec und print die äußeren Klammern für die Leitungen entfernen.

Die Verwendung von exec ist jedoch nicht der beste Weg, dieses Problem in Python anzugehen (wie erklärt here). Sie werden wahrscheinlich später auf Probleme stoßen, wenn Sie versuchen, in Python so zu programmieren, wie Sie es in Stata gewohnt sind.

Ein besserer Ansatz könnte darin bestehen, ein Wörterbuch zu erstellen und für jede Nummer einen anderen Schlüssel zu verwenden. Zum Beispiel:

>>> 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} 
Verwandte Themen