5

我最近一直在用 Stata 做一些统计工作,但不太喜欢它。

我不觉得它是一种“正确的”编程语言:特别是我认为在满足条件之前没有办法循环。

我的感觉是对的,还是 Stata 真的是图灵完备的?

4

5 回答 5

3

我以前从未听说过 Stata,但网页吹嘘它有“ if, while ”和“ looping and branching ”。

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

我不知道“正确的”编程语言是什么意思,但乍一看它肯定是图灵完备的。

于 2010-12-09T07:00:25.403 回答
1

一种“适当的”编程语言,您可以用它构建网页或 GUI?当然不是。但这有点极端。您当然可以使用 .ado 和 .do 文件编写循环;我会说它是图灵完整的。

于 2010-12-11T06:43:43.490 回答
1

Stata 的ado语言具有所有常见的条件语句:

但是,重要的是不要混淆两者:

此外,Stata 的ado语言循环结构包括:

Mata,Stata的矩阵编程语言还支持:

因此,Stataadomata编程语言似乎都满足图灵完备的标准。

需要注意的是,这些不是 通用编程语言,而是成熟的统计语言

于 2018-05-31T10:54:25.250 回答
0

虽然您可以使用 -while-、-if、-else- 命令执行循环直到满足条件,但在 Stata 中使用 -foreach- 或 -forvalues- 循环通常是更好的主意。
所以,而不是说:

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

或者

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

这样做通常更好(也更直观):

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

-- 不需要 -if-、-else- 或 -break- 条件。有关详细信息,请参阅 Stata 中的 -help forvalues- 或 -help foreach-。


^注意:我原帖中的 while-else 循环已被删除——感谢 Keith 的提醒。-else- 部分仅用于 if{] else{} 循环示例。无论如何,我的帖子的重点并不是建议使用 while/else 或 if/else 循环,而是 -foreach-/-forvalues- 通常是首选方法。

于 2010-12-16T05:04:01.903 回答
0

@eric.a.booth:我认为你的例子很奇怪。我不确定我见过while { ... } else {...}

另外,请注意,Stata 在运行之前不会测试循环,并且会允许自己陷入无限循环。

local x = 0
while `x'<5 {
   display `x' / 2
   local ++x
}
于 2010-12-20T23:11:40.463 回答