最近我一直在使用Stata进行统计工作,但并不是很喜欢。
我觉得它不像一个“正式”的编程语言:特别是我认为没有一种方法可以循环直到满足条件。
我的感觉是正确的吗?还是说Stata确实是图灵完备的?
最近我一直在使用Stata进行统计工作,但并不是很喜欢。
我觉得它不像一个“正式”的编程语言:特别是我认为没有一种方法可以循环直到满足条件。
我的感觉是正确的吗?还是说Stata确实是图灵完备的?
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
虽然您可以使用 -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
}