2011-05-10 6 views
2

Je suis récemment entré dans Stata en provenance d'un contexte procédural/OO/fonctionnel, et j'ai du mal à comprendre les éléments de base de la langue.Langage de programmation Stata sans syntaxe?

Par exemple, j'ai découvert qu'il existe une commande syntax qui "permet aux programmes d'interpréter les arguments que l'utilisateur tape en fonction d'une grammaire, telle que la syntaxe Stata standard". Je déduis que c'est la raison pour laquelle certaines commandes requièrent une liste de variables données en arguments à séparer par des espaces tandis que d'autres requièrent une liste séparée par des virgules. Mais l'idée d'un programme définissant sa propre syntaxe à la place de la syntaxe (paramétrique) imposée semble tout bonnement étrange.

Une autre construction assez intéressante est la syntaxe pour la définition et l'expansion de la macro (`macro') et l'absence apparente de variables locales telles que connues dans d'autres langages. Y a-t-il quelque chose comme un document "Stata for Java developers" expliquant les concepts de base du langage aux gens de mon milieu? PS: Toutes nos excuses si cette question ne semble pas claire.

Malheureusement, je ne peux pas formuler de questions plus concrètes/claires à ce stade :(

+0

Votre question est-elle juste "Y at-il un bon guide de démarrage rapide"? Ou voulez-vous savoir quelque chose sur les fonctionnalités du langage? Dans les deux cas, vous n'avez probablement pas besoin de ces fonctionnalités de programmation, du moins pour l'instant. – Marcin

+0

@ Marcin: Je veux comprendre la langue, plutôt que de pouvoir l'appliquer à un problème. Qu'est-ce qui vous fait penser que je n'ai pas besoin de ces fonctionnalités? Je suis censé reprendre une base de code d'un collègue qui utilise ces fonctionnalités, c'est ainsi que je les ai découvert ... – blubb

+0

Je pense que parce que je connais d'autres langages qui utilisent de telles fonctionnalités. Il n'y aura pas de calculs qui les exigent activement, à moins que votre langage soit très, très funky. Apprenez le reste de la langue avant d'essayer de déployer ces fonctionnalités dans un nouveau code. – Marcin

Répondre

8

Je ne suis pas exactement sûr de ce que vous cherchez ... mais voici quelques points connexes: Stata est un peu comme écrire un Unix . script shell ou un fichier de commandes de Windows Chaque ligne exécute une commande, et le premier mot est le nom de la commande Par convention, la plupart des commandes ont la structure suivante:. [.]

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

Supports signifie qu'il est en option (ou indisponible , en fonction de la commande) Certaines commandes peuvent être préfixées (par exemple by:, xi: ou svy:) La syntaxe des commandes de Stata Corp et des utilisateurs expérimentés est assez cohérente. Les utilisateurs de Stata écrivent aussi des commandes, vous voyez parfois des choses farfelues. Lorsque les utilisateurs Stata écrivent des commandes, ils sont enregistrés dans des fichiers .ado (pas .do) et sont définis à l'aide de la commande program. (Voir help program et la section « Fichiers Ado » du manuel.) L'écriture d'une commande est semblable à l'écriture d'une fonction dans d'autres langues (par exemple, Matlab)

La commande syntax est utilisé pour vous aider à écrire votre propre commande. Lorsque vous exécutez une commande, tout ce qui suit le nom de la commande (command ci-dessus) est transmis au programme dans la macro locale `0'. La commande de syntaxe analyse cette macro locale, de sorte que vous pouvez référencer `varlist' ou `if' et ainsi de suite. En théorie, vous pouvez analyser vous-même `0', mais la commande de syntaxe le rend beaucoup plus facile pour vous et vos utilisateurs (tant que vous suivez la syntaxe conventionnelle). Je mets un exemple en bas.

Je ne sais pas exactement ce que vous entendez par «absence apparente de variables locales telles que connues dans d'autres langues». Les macros stockent une seule chaîne ou un seul numéro en mémoire. Here's a comment J'ai écrit sur les macros locales/globales de Stata. Ils sont en effet une caractéristique unique du langage de programmation de Stata. Comme leur nom l'indique, les macros "locales" ne sont disponibles que dans un fichier programme (commande) ou .do tandis que les macros "globales" sont disponibles dans une session Stata.

J'ai découvert que, une fois habitué aux macros dans Stata, j'ai commencé à les manquer dans d'autres langues. Ils sont très pratiques. En plus des macros (locales/globales) et de l'ensemble de données principal, vous pouvez également stocker des "choses" en mémoire avec les commandes scalar et matrix (et une ou deux autres choses obscures).

J'espère que cela aide. Here's a list resources qui pourrait aider.

Exemple:

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 
+0

Vous l'avez cloué. Cela plus votre réponse dans l'autre question dénoué le noeud. Merci! – blubb

1

Quelques livres offrent un "X" pour les utilisateurs Y approche, mais généralement entre les statistiques des solutions logicielles. En ce qui concerne votre question, je recommanderais d'abord d'utiliser instinct. J'ai commencé à lire du code (programmation et balisage) il y a une dizaine d'années, et même si je n'arrive pas à coder dans un grand nombre de langues, je peux lire quelques langues assez facilement. J'ai trouvé Stata facile parce que la plupart de ses commandes de base sont simples, avec des instructions facultatives récurrentes comme over, if ou replace (pour prendre un ensemble volontairement diversifié d'instructions) qui sont faciles à comprendre, puis à appliquer. Quand j'enseigne Stata, j'ai toujours du mal à faire en sorte que les élèves utilisent les pages help autant que moi (et j'adore le fait qu'ils soient accessibles aussi facilement, comme dans R). J'explique le paradoxe en considérant le fait que je peux lire les indications de syntaxe tout de suite. La syntaxe est très bien couverte par la réponse précédente à votre question. Le supplément consiste à ouvrir les manuels [R], [U] et surtout [P] fournis avec Stata dans le dossier utilities. Il y a une foule de détails qui intéresseront à la fois les programmeurs et les statisticiens de formation. C'est là que j'ai appris à utiliser des macros et des boucles, au-delà de la logique évidente des commandes comme local/global et foreach/while (si je comprends bien le terme, Stata est Turing-complet).

Stata est parfois un peu difficile quand il s'agit d'utiliser des guillemets simples/doubles dans les boucles de macro, mais c'est assez simple sinon. S'amuser!