Язык программирования Stata без синтаксиса? - PullRequest
2 голосов
/ 10 мая 2011

Я недавно попал в Stata из процедурного / OO / функционального фона, и у меня возникли проблемы с пониманием основных элементов языка.

Например, я обнаружил, что есть команда syntax, которая «позволяет программам интерпретировать аргументы, которые пользователь вводит в соответствии с грамматикой, такой как стандартный синтаксис Stata». Я предполагаю, что это причина, почему некоторые команды требуют, чтобы список переменных, заданных в качестве аргументов, разделялся пробелами, в то время как другим требуется список через запятую. Но идея программы, определяющей собственный синтаксис вместо применяемого синтаксиса (параметра), кажется странной.

Еще одна довольно интересная конструкция - это синтаксис для определения и расширения макросов (`macro') и очевидное отсутствие локальных переменных, известных в других языках.

Есть ли что-то вроде документа "Stata для разработчиков Java", объясняющего основные понятия языка людям с моим прошлым?

PS: Извиняюсь, если этот вопрос кажется неясным. К сожалению, я не могу сформулировать более конкретные / ясные вопросы на данный момент: (

Ответы [ 2 ]

9 голосов
/ 11 мая 2011

Я не совсем уверен, что вы ищете ... но вот несколько связанных моментов.Stata - это что-то вроде написания сценария оболочки Unix или пакетного файла Windows.Каждая строка выполняет команду, а первое слово - это имя команды.По соглашению, большинство команд имеют следующую структуру:

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

Скобки [.] Означает, что это необязательно (или недоступно, в зависимости от команды).Некоторые команды могут иметь префикс (например, by:, xi: или svy:). Синтаксис команд от Stata Corp и опытных пользователей довольно последовательный.Но поскольку пользователи Stata также пишут команды, вы время от времени видите вещи, которые являются дурацкими.

Когда пользователи Stata пишут команды, они сохраняются в файлах .ado (не .do) и определяются с помощью команды program,(См. help program и раздел «Ado files» руководства.) Написание команды сродни написанию функции на других языках (например, MatLab)

Команда syntax используется, чтобы помочь вамнаписать свою командуКогда вы выполняете команду, все, что следует за именем команды (command выше), передается программе в локальном макросе `0'.Синтаксическая команда анализирует этот локальный макрос, чтобы вы могли ссылаться на `varlist' или `if' и так далее.Теоретически, вы можете разобрать `0' самостоятельно, но синтаксическая команда значительно облегчит вам и вашим пользователям (при условии, что вы следуете обычному синтаксису).Я привожу пример внизу.

Я не знаю точно, что вы подразумеваете под «очевидным отсутствием локальных переменных, как это известно в других языках».Макросы хранят одну строку или одно число в памяти. Вот комментарий Я написал о локальных / глобальных макросах Stata.Это действительно уникальная особенность языка программирования Stata.Как следует из их имен, «локальные» макросы доступны только в указанной программе (команде) или файле .do, в то время как «глобальные» макросы доступны во время сеанса Stata.

Я обнаружил, что, как только привык кМакросы в Stata, я начал скучать по ним на других языках.Они очень удобны.В дополнение к (локальному / глобальному) макросам и основному набору данных вы также можете хранить «вещи» в памяти с помощью команд scalar и matrix (и одной или двух других непонятных вещей).

Надеюсь, это поможет. Вот список ресурсов , которые могут помочь.

Пример:

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
1 голос
/ 13 мая 2011

В нескольких книгах предлагается подход "X для Y пользователей", но в целом между программными решениями статистики. Что касается вашего вопроса, я бы рекомендовал сначала использовать инстинкт.

Я начал читать код (программирование и разметку) около десяти лет назад, и хотя я не могу кодировать на большом количестве языков, я довольно легко могу читать несколько языков. Я обнаружил, что Stata проста, потому что большинство ее основных команд просты, с повторяющимися необязательными утверждениями, такими как over, if или replace (для принятия добровольно разнообразного набора утверждений), которые легко понять и затем применить.

Когда я преподаю Stata, у меня всегда возникают проблемы с тем, чтобы студенты использовали страницы help так же часто, как и я (и мне нравится тот факт, что к ним можно получить доступ так же легко, как в R). Я объясняю парадокс, учитывая тот факт, что я могу сразу прочитать показания синтаксиса. Синтаксис очень хорошо описан в предыдущем ответе на ваш вопрос.

Дополнительная миля состоит в открытии справочников [R], [U] и особенно [P], которые поставляются со Stata, в папке utilities. Там есть масса подробностей, которые заинтересуют как программистов, так и обучающих статистиков. Именно здесь я научился использовать макросы и циклы, помимо очевидной логики таких команд, как local / global и foreach / while (если я правильно понимаю этот термин, Stata является тьюрингово-полным).

В Stata иногда бывает немного больно, когда дело доходит до использования одинарных / двойных кавычек в макро циклах, но в остальном это довольно просто. Веселись!

...