Вопрос

В последнее время я работаю со статистикой с Stata и не очень наслаждаюсь этим.

Мне не кажется, что это «правильный» язык программирования: в частности, я не считать Есть способ зацикнуть, пока условие не будет выполнено.

Я прав в своем чувстве, или Стата действительно заполняет?

Это было полезно?

Решение

Я никогда не слышал о Stata раньше, но веб -страница хвастается, что она есть »Если, пока" а также "петля и разветвление".

Wikibooks есть этот пример:

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

Я не знаю, что «Правильный» язык программирования означает, но, на первый взгляд, это определенно кажется, что Тьюринг-полное.

Другие советы

«Правильный» язык программирования в том смысле, что вы могли бы создать с собой веб -страницу или графический интерфейс? Конечно нет. Но это немного экстремально. Вы, безусловно, можете написать петли с файлами .ado и .do; Я бы сказал, что это заполнено Тьюрингом.

@Eric.a.booth: Я думаю, что ваш пример странный. Я не уверен, что когда -либо видел while { ... } else {...}

Кроме того, обратите внимание, что Stata не тестирует петлю перед тем, как запустить его, и позволит себе попасть в бесконечную петлю.

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

В то время как вы можете использовать команды -while-, -если -элс -команды для выполнения цикла до тех пор, пока условие не будет выполнено, обычно в Stata является лучшей идеей использовать петли -фухол или -фраулс на их месте.
Итак, вместо того, чтобы говорить:

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

или же

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

обычно лучше (и более интуитивно понятно) вместо этого:

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

-Нет -if-, -else- или-прерывание. Условия необходимы. См. - help forvalues- или -Help foreach- в Stata для получения подробной информации.


^ПРИМЕЧАНИЕ: Кейт, Кейт, был удален цикл while-else в моем оригинальном посте-спасибо за головы, Кейт. Часть -эльсе была предназначена только для примера IF {] else {} цикла. Несмотря на это, смысл моего поста не заключался в том, чтобы предположить использование некоторого времени/иначе или в том случае, если/иначе цикл, это было то, что -фуч-/-forvalues-обычно предпочтительный подход.

Стата ado Язык имеет все обычные условные заявления:

Тем не менее, важно, чтобы человек не запутал их:

Кроме того, Stata's ado Конструкции языковой петли включают:

Mata, Язык программирования матрицы Stata также поддерживает:

Следовательно, обе Статы ado а также mata Языки программирования, по -видимому, удовлетворяют критериям для того, чтобы быть охарактеризованными как Turing Complete.

Важно отметить, что они нет Общие языки программирования, но полноценный статистические языки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top