我最近一直在用 Stata 做一些统计工作,但不太喜欢它。
我不觉得它是一种“正确的”编程语言:特别是我认为在满足条件之前没有办法循环。
我的感觉是对的,还是 Stata 真的是图灵完备的?
我最近一直在用 Stata 做一些统计工作,但不太喜欢它。
我不觉得它是一种“正确的”编程语言:特别是我认为在满足条件之前没有办法循环。
我的感觉是对的,还是 Stata 真的是图灵完备的?
我以前从未听说过 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
我不知道“正确的”编程语言是什么意思,但乍一看它肯定是图灵完备的。
一种“适当的”编程语言,您可以用它构建网页或 GUI?当然不是。但这有点极端。您当然可以使用 .ado 和 .do 文件编写循环;我会说它是图灵完整的。
虽然您可以使用 -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- 通常是首选方法。
@eric.a.booth:我认为你的例子很奇怪。我不确定我见过while { ... } else {...}
另外,请注意,Stata 在运行之前不会测试循环,并且会允许自己陷入无限循环。
local x = 0
while `x'<5 {
display `x' / 2
local ++x
}