我最近一直在和Stata做一些统计工作而不是非常享受。
我觉得这不是一种“适当的”编程语言:特别是我不会认为有一种方法可以循环直到满足条件。
我的感觉是正确的,还是Stata真正图灵完成?
答案 0 :(得分:3)
我之前从未听说过Stata,但网页吹嘘它有“if, while”和“looping and branching”。
Wikibooks有this example:
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
我不知道“正确的”编程语言意味着什么,但乍一看它肯定是图灵完成的。
答案 1 :(得分:2)
一种“适当的”编程语言,你可以用它构建一个网页或GUI吗?当然不是。但这有点极端。你当然可以用.ado和.do文件编写循环;我会说这是完整的。
答案 2 :(得分:1)
虽然你可以使用-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-通常是首选方法。
答案 3 :(得分:1)
@ eric.a.booth:我认为你的例子很奇怪。我不确定我见过while { ... } else {...}
另外,请注意,Stata在运行之前不会测试循环,并且会让自己陷入无限循环。
local x = 0
while `x'<5 {
display `x' / 2
local ++x
}
答案 4 :(得分:1)
Stata的ado
语言具有所有通常的条件语句:
然而,重要的是不要混淆两者:
此外,Stata的ado
语言循环结构包括:
for(从Stata 8开始的过时命令)
Mata
,Stata的矩阵编程语言也支持:
因此,Stata的ado
和mata
编程语言都会出现
满足被定性为图灵完成的标准。
重要的是要注意,这些是不 通用编程 语言,但是成熟的统计语言。