Question

J'ai fait quelques statistiques travail avec Stata récemment et ne bénéficiant pas de beaucoup.

en particulier, je ne suis pas penser il y a un moyen de boucle jusqu'à ce qu'une condition soit remplie:

Il ne se sent pas à moi comme c'est une programmation « correcte » la langue.

Ai-je raison dans mon sentiment, ou est Stata vraiment Turing-complet?

Était-ce utile?

La solution

Je ne l'ai jamais entendu parler de Stata avant, mais la page Web se vante qu'il a « si, tout en »et " en boucle et de branchement ".

cet exemple :

local k = 1
file open myfile using toto.txt, read text
file read myfile line
while r(eof) == 0 {
    local k = `k' + 1
    di "`k' `line'"
    file read myfile line
    }
file close myfile

Je ne sais pas ce que « bon » langage de programmation moyens, mais à première vue, il semble certainement être Turing-complet.

Autres conseils

Un langage de programmation « correcte » dans le sens que vous pourriez construire une page Web ou l'interface graphique avec elle? Bien sûr que non. Mais c'est un peu extrême. Vous pouvez certainement écrire des boucles avec .ado et .DO fichiers; Je dirais qu'il est Türing complet.

@ eric.a.booth: Je pense que votre exemple est étrange. Je ne suis pas sûr que je l'ai jamais vu while { ... } else {...}

En outre, notez que Stata ne teste pas la boucle avant de l'exécuter, et se permettre de se coincer dans une boucle infinie.

local x = 0
while `x'<5 {
   display `x' / 2
   local ++x
}

Alors que vous pouvez utiliser les -while-, -si, commandes -Else- pour effectuer une boucle jusqu'à ce qu'une condition est remplie, il est généralement une meilleure idée Stata d'utiliser le -foreach- ou boucles -forvalues- à leur place.
Ainsi, au lieu de dire:

while "`1'" != "" {
<do something>
} 

ou

if "`a'" == "" {
<do something>
}
else {
<do something else>
}

il est généralement préférable (et plus intuitive) à la place de le faire:

forvalues x = 1/100 {
<do something>
}

- Non -if-, -Else- ou conditions -break- nécessaires. Voir -help forvalues- ou -help foreach- Stata pour plus de détails.


^ NOTE: le tout-autre boucle dans mon post original a été retiré - merci pour les heads-up, Keith. La partie -Else- était destinée à la si {]} else {exemple de boucle uniquement. Quel que soit le point de mon poste était de ne pas suggérer l'utilisation d'un certain temps / autre ou si / boucle d'autre, il était que -foreach - / -. Forvalues- sont généralement une approche préférée

La langue ado de Stata a toutes les déclarations conditionnelles habituelles:

Cependant, il est important que l'on ne confondons pas:

En outre, les constructions de boucle de langage ado Stata comprennent:

Mata, langage de programmation de la matrice de Stata prend également en charge:

Par conséquent, ado et les langages de programmation de mata des deux Stata semblent satisfaire aux critères requis pour caractériser complète Turing.

Il est important de noter cependant que ce sont pas Programmation générale langues , mais à part entière langues statistiques .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top