¿Lenguaje de programación Stata sin sintaxis?

Recientemente entré en Stata proveniente de un fondo procedimental / OO / funcional, y tengo problemas para comprender los elementos básicos del lenguaje.

Por ejemplo, descubrí que hay una syntax comando que "permite a los programas interpretar los argumentos que el usuario escribe de acuerdo con una gramática, como la sintaxis estándar de Stata". Deduzco que esta es la razón por la que algunos comandos requieren que una lista de variables dadas como argumentos estén separados por espacios en blanco, mientras que otros requieren una lista separada por comas. Pero la idea de que un programa defina su propia sintaxis en lugar de aplicar la sintaxis (de parámetros) parece sencillamente extraña.

Otra construcción bastante interesante es la sintaxis para la definición y expansión de macros (`macro') y la aparente ausencia de variables locales como se conoce en otros idiomas.

¿Existe algo así como un documento de "Stata para desarrolladores de Java" que explique los conceptos básicos del lenguaje a personas con mi experiencia?

PD: Disculpas si esta pregunta no parece clara. Desafortunadamente, no puedo formular preguntas más concretas / claras en este momento :(

preguntado el 10 de mayo de 11 a las 13:05

¿Su pregunta es simplemente "Existe una buena guía de inicio rápido"? ¿O quieres saber algo sobre las características del idioma? En cualquier caso, probablemente no necesite estas funciones de programación, al menos por ahora. -

@Marcin: Quiero entender el idioma, en lugar de poder aplicarlo a un problema. ¿Qué te hace pensar que no necesito estas funciones? Se supone que debo tomar el control de una base de código de un compañero de trabajo que hace uso de estas características, así es como las descubrí ... -

Creo que porque estoy familiarizado con otros lenguajes que utilizan estas funciones. No habrá ningún cálculo que los requiera activamente, a menos que su lenguaje sea muy, muy funky. Aprenda el resto del idioma antes de intentar implementar esas funciones en un código nuevo. -

2 Respuestas

No estoy exactamente seguro de lo que está buscando ... pero aquí hay algunos puntos relacionados. Stata es como escribir un script de shell de Unix o un archivo por lotes de Windows. Cada línea ejecuta un comando y la primera palabra es el nombre del comando. Por convención, la mayoría de los comandos tienen la siguiente estructura:

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

Corchetes [.] Significa que es opcional (o no disponible, según el comando). Algunos comandos pueden tener un prefijo (como by:, xi:o svy:) La sintaxis de los comandos de Stata Corp y los usuarios experimentados es bastante consistente. Pero, debido a que los usuarios de Stata también escriben comandos, ocasionalmente ves cosas que son extravagantes.

Cuando los usuarios de Stata escriben comandos, se guardan en archivos .ado (no .do) y se definen utilizando el program mando. (Ver help program y la sección "Archivos Ado" del manual). Escribir un comando es similar a escribir una función en otros idiomas (por ejemplo, MatLab)

La syntax El comando se usa para ayudarte a escribir tu propio comando. Cuando ejecuta un comando, todo lo que sigue al nombre del comando (command arriba) se pasa al programa en la macro local `0'. El comando de sintaxis analiza esta macro local, para que pueda hacer referencia `varlist' or `if' etcétera. En teoría, podría analizar `0' usted mismo, pero el comando de sintaxis lo hace mucho más fácil para usted y sus usuarios (siempre que siga la sintaxis convencional). Pongo un ejemplo al final.

No sé exactamente qué quiere decir con "ausencia aparente de variables locales como se conocen en otros idiomas". Las macros almacenan una sola cadena o un solo número en la memoria. Aquí hay un comentario Escribí sobre las macros locales / globales de Stata. De hecho, son una característica única del lenguaje de programación de Stata. Como sus nombres implican, las macros "locales" solo están disponibles dentro de un programa específico (comando) o archivo .do, mientras que las macros "globales" están disponibles durante una sesión de Stata.

Descubrí que, una vez que me acostumbré a las macros en Stata, comencé a extrañarlas en otros idiomas. Son bastante útiles. Además de las macros (locales / globales) y el conjunto de datos principal, también puede almacenar "cosas" en la memoria con el scalar y matrix comandos (y una o dos otras cosas oscuras).

Espero que eso ayude. Aquí hay una lista de recursos eso podría ayudar.

Ejemplo:

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

contestado el 23 de mayo de 17 a las 13:05

Lo lograste. Esto, más su respuesta en la otra pregunta, desató el nudo. ¡Gracias! - lloriquear

Algunos libros ofrecen un enfoque de "X para usuarios de Y", pero generalmente entre soluciones de software de estadísticas. Con respecto a su pregunta, recomendaría usar el instinto primero.

Empecé a leer código (programación y marcado) hace unos diez años, y aunque no puedo codificar en una gran cantidad de lenguajes, puedo leer algunos lenguajes con bastante facilidad. Encontré Stata fácil porque la mayoría de sus comandos principales son sencillos, con declaraciones opcionales recurrentes como over, if or replace (tomar un conjunto de declaraciones voluntariamente diverso) que sean fáciles de entender y luego aplicar.

Cuando enseño Stata, siempre tengo problemas para lograr que los estudiantes usen el help páginas tanto como yo (y me encanta el hecho de que se pueda acceder a ellas tan fácilmente, como en R). Explico la paradoja considerando el hecho de que puedo leer las indicaciones de sintaxis de inmediato. La sintaxis está muy bien cubierta por la respuesta anterior a su pregunta.

La milla extra consiste en abrir los manuales [R], [U] y especialmente [P] que vienen con Stata en el utilities carpeta. Hay una gran cantidad de detalles que interesarán tanto a los programadores como a los estadísticos en formación. Aquí es donde aprendí a usar macros y bucles, más allá de la lógica obvia de comandos como local/global y foreach/while (si entiendo el término correctamente, Stata es Turing completo).

Stata a veces es un poco molesto cuando se trata de usar comillas simples / dobles en bucles macro, pero de lo contrario es bastante sencillo. ¡Que te diviertas!

contestado el 13 de mayo de 11 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.