3 Stimmen

Stata-Programmiersprache ohne Syntax?

Ich bin vor kurzem in Stata eingestiegen, da ich von einem prozeduralen/OO/funktionalen Hintergrund komme, und habe Schwierigkeiten, die grundlegenden Elemente der Sprache zu verstehen.

Ich habe zum Beispiel entdeckt, dass es eine syntax Befehl, der "es Programmen ermöglicht, die vom Benutzer eingegebenen Argumente gemäß einer Grammatik, wie der Standard-Syntax von Stata, zu interpretieren". Ich schließe daraus, dass dies der Grund ist, warum einige Befehle verlangen, dass eine Liste von Variablen, die als Argumente angegeben werden, durch Leerzeichen getrennt wird, während andere eine durch Komma getrennte Liste verlangen. Aber die Idee, dass ein Programm seine eigene Syntax definiert, anstatt die (Parameter-)Syntax zu erzwingen, scheint einfach seltsam.

Ein weiteres sehr interessantes Konstrukt ist die Syntax für die Makrodefinition und -expansion ( `macro' ) und das offensichtliche Fehlen von lokalen Variablen, wie sie in anderen Sprachen bekannt sind.

Gibt es so etwas wie ein Dokument "Stata für Java-Entwickler", das die grundlegenden Konzepte der Sprache für Leute mit meinem Hintergrund erklärt?

PS: Ich bitte um Entschuldigung, wenn diese Frage unklar erscheint. Leider kann ich zu diesem Zeitpunkt keine konkreteren/klareren Fragen formulieren :(

10voto

Keith Punkte 1037

Ich bin mir nicht ganz sicher, wonach Sie suchen... aber hier sind ein paar verwandte Punkte. Stata ist so ähnlich wie ein Unix-Shell-Skript oder eine Windows-Batch-Datei. Jede Zeile führt einen Befehl aus, und das erste Wort ist der Befehlsname. Konventionell haben die meisten Befehle die folgende Struktur:

command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options]

Klammern [.] bedeuten, dass es optional ist (oder nicht verfügbar, je nach Befehl). Einigen Befehlen kann ein Präfix vorangestellt werden (z. B. by: , xi: o svy: ) Die Syntax der Befehle von Stata Corp und erfahrenen Benutzern ist ziemlich einheitlich. Da aber auch Stata-Benutzer Befehle schreiben, sehen Sie gelegentlich Dinge, die verrückt sind.

Wenn Stata-Benutzer Befehle schreiben, werden diese in .ado-Dateien (nicht .do) gespeichert und mit der program Befehl. (Siehe help program und im Abschnitt "Ado-Dateien" des Handbuchs). Das Schreiben eines Befehls ist vergleichbar mit dem Schreiben einer Funktion in anderen Sprachen (z.B. MatLab)

En syntax wird verwendet, um Ihnen beim Schreiben Ihres eigenen Befehls zu helfen. Wenn Sie einen Befehl ausführen, wird alles, was dem Befehlsnamen ( command oben) wird im lokalen Makro an das Programm übergeben `0' . Der Syntaxbefehl parst dieses lokale Makro, so dass Sie auf `varlist' o `if' und so weiter. Theoretisch könnte man `0' selbst, aber der Syntax-Befehl macht es Ihnen und Ihren Benutzern viel einfacher (solange Sie sich an die konventionelle Syntax halten). Ich habe unten ein Beispiel angefügt.

Ich weiß nicht genau, was Sie mit "scheinbarem Fehlen von lokalen Variablen, wie sie in anderen Sprachen bekannt sind" meinen. Makros speichern eine einzelne Zeichenkette oder eine einzelne Zahl im Speicher. Hier ist ein Kommentar Ich habe über die lokalen/globalen Makros von Stata geschrieben. Sie sind in der Tat ein einzigartiges Merkmal der Programmiersprache von Stata. Wie ihre Namen andeuten, sind "lokale" Makros nur innerhalb eines bestimmten Programms (Befehls) oder einer .do-Datei verfügbar, während "globale" Makros in der gesamten Stata-Sitzung verfügbar sind.

Sobald ich mich an Makros in Stata gewöhnt hatte, stellte ich fest, dass ich sie in anderen Sprachen zu vermissen begann. Sie sind ziemlich praktisch. Zusätzlich zu den (lokalen/globalen) Makros und dem Hauptdatensatz können Sie auch "Dinge" im Speicher speichern, indem Sie die scalar y matrix Befehle (und ein oder zwei andere obskure Dinge).

Ich hoffe, das hilft. Hier ist eine Liste mit Ressourcen die helfen könnten.

program define myprogram
    syntax varlist [if], [hello(string) yes]
    macro list _0 _varlist _if _hello _yes 
    summarize `varlist' `if'
    display "Here's the string in my hello option: `hello'"
    if !missing("`yes'") di "Yes is on"
    else                 di "Yes is off"
end 

sysuse auto.dta    
myprogram rep78 headroom if price > 5000 , hello("world") yes

2voto

Fr. Punkte 2745

Einige wenige Bücher bieten einen "X für Y-Benutzer"-Ansatz, aber im Allgemeinen zwischen Statistiksoftwarelösungen. In Bezug auf Ihre Frage würde ich empfehlen, zuerst den Instinkt zu benutzen.

Ich habe vor etwa zehn Jahren angefangen, Code zu lesen (Programmierung und Markup), und obwohl ich nicht in vielen Sprachen programmieren kann, kann ich einige Sprachen recht gut lesen. Ich fand Stata einfach, weil die meisten Kernbefehle einfach sind, mit wiederkehrenden optionalen Anweisungen wie over , if o replace (freiwillig verschiedene Aussagen zu treffen), die leicht zu verstehen und dann anzuwenden sind.

Wenn ich Stata unterrichte, habe ich immer Probleme, die Studenten dazu zu bringen, die help Seiten so sehr wie ich (und ich finde es toll, dass sie so einfach zugänglich sind, genau wie in R). Ich erkläre mir das Paradoxon damit, dass ich die Syntaxangaben sofort lesen kann. Die Syntax wird in der vorherigen Antwort auf Ihre Frage sehr gut behandelt.

Die zusätzliche Meile besteht darin, die [R]-, [U]- und insbesondere die [P]-Handbücher zu öffnen, die mit Stata im utilities Ordner. Dort gibt es eine Fülle von Details, die sowohl für Programmierer als auch für Statistiker in der Ausbildung interessant sind. Hier habe ich gelernt, Makros und Schleifen zu verwenden, die über die offensichtliche Logik von Befehlen wie local / global y foreach / while (wenn ich den Begriff richtig verstehe, ist Stata Turing-komplett).

Stata ist manchmal etwas schwierig, wenn es um die Verwendung von einfachen/doppelten Anführungszeichen in Makroschleifen geht, aber ansonsten ist es ziemlich unkompliziert. Viel Spaß!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X