Ich habe ein Python
-Skript, das aufräumt und grundlegende statistische Berechnungen in einem großen Panel-Dataset durchführt ( 2,000,000+ observations
).
Ich finde, dass einige dieser Aufgaben besser für Stata
geeignet sind, und schrieb eine do-Datei mit den notwendigen Befehlen. Daher möchte ich eine .do-Datei in meinem Python-Code ausführen. Wie würde ich eine .do
Datei von Python
aufrufen?
Ich denke @ user229552 zeigt in die richtige Richtung. Pythons subprocess
Modul kann verwendet werden. Unten ein Beispiel, das für mich mit Linux OS funktioniert.
Angenommen, Sie haben eine Python-Datei namens pydo.py
mit folgendem Inhalt:
und eine Stata-Datei namens pyexample3.do
mit folgendem Inhalt:
Die Ausführung von pydo.py
in einem Terminalfenster funktioniert wie erwartet.
Sie könnten auch eine Python-Funktion definieren und diese verwenden:
%Vor%Der vollständige Anruf von einem Terminal mit Ergebnissen:
%Vor%Quellen:
Eine andere Route für die gemeinsame Verwendung von Python und Stata finden Sie unter
Wenn Sie dies in einer Befehlszeileneinstellung ausführen, sollten Sie in der Lage sein, Stata über die Befehlszeile von python aus aufzurufen (ich weiß nicht, wie ich einen Shell-Befehl von Python aus aufrufen kann, aber nicht sei zu schwer, siehe hier: Aufruf eines externen Befehls in Python ). Weitere Informationen zum Ausführen von Stata über die Befehlszeile (auch als Stapelmodus bezeichnet) finden Sie hier: Ссылка
Diese Antwort erweitert @Roberto Ferrers Antwort und löst ein paar Probleme, auf die ich gestoßen bin.
Stata im Systempfad
Damit stata
Code ausführen kann, muss er im Systempfad (zumindest unter Windows) korrekt eingerichtet sein. Zumindest für mich wurde dies nicht automatisch bei der Installation von Stata eingerichtet, und ich fand die einfachste Korrektur darin, den vollständigen Pfad einzutragen (was für mich "C:\Program Files (x86)\Stata12\Stata-64
war), d.h.:
So führen Sie den Code ruhig im Hintergrund aus
Es ist möglich, den Code ruhig im Hintergrund laufen zu lassen (d. h. nicht jedes Mal Stata zu öffnen), indem Sie den Befehl /e
if.
cmd = ["C:\Program Files (x86)\Stata12\Stata-64,"/e","do", dofile]
Speicherort der Protokolldatei
Wenn Sie ruhig im Hintergrund arbeiten, speichert Stata die Protokolldateien. Dies geschieht im Arbeitsverzeichnis von cmd
. Das hängt davon ab, wo der Code ausgeführt wird, aber für mich, seit ich Python aus Notepad ++ ausgeführt habe, wollte ich die Protokolldateien in C:\Program Files (x86)\Notepad++
speichern, auf die Stata keinen Schreibzugriff hatte. Dies kann durch Angabe des Arbeitsverzeichnisses beim Aufruf des Unterprozesses geändert werden.
Diese Änderungen am Code von Roberto Ferrer
führen zu: