gpt4 book ai didi

execution - 有没有办法告诉 Stata 执行整个 do 文件而忽略产生异常(甚至语法错误)的行?

转载 作者:行者123 更新时间:2023-12-01 09:59:23 29 4
gpt4 key购买 nike

我在后台运行耗时的代码,经常由于 do 文件开头的一个小语法错误,甚至 10% 的代码都没有执行。

我更希望 do 文件的其余部分也被执行,因为有时开始时的错误对最后的计算没有影响。

最佳答案

(版本 2)

希望 Stata 忽略错误本身可能是错误的。

  1. 如果在 do-file 的早期出现错误,通常会对后续内容产生影响。

  2. 假设您让 Stata 按您的意愿工作。你怎么知道 Stata 忽略了一些重要的事情还是一些琐碎的事情?如果它忽略了一些微不足道的事情,那应该很容易修复。如果它忽略了一些重要的事情,那就是错误的决定。

现在让我们更具建设性。 do 的帮助告诉您有一个 nostop 选项。您需要非常小心地使用它,但它可以在这里提供帮助。

do, nostop 的上下文正是 OP 的上下文。人们有 do-files,通常预计会因为大数据集或大量繁重的计算而花费很长时间,并让它们继续运行,历史上是“一夜之间”或“当你去吃午饭时”。然后他们会很生气地发现 do 文件在第一个错误时很快就终止了,如果错误是微不足道的,他们会特别生气。因此,do, nostop 的想法是尽可能多地do,但作为调试的辅助手段。例如,假设你在很多地方弄错了一个变量名;您 生成 Y 但稍后引用 y,它不存在。您可能希望找到分散在文件中的相应错误消息,您可以修复这些错误消息。错误消息是这里的关键。

关于 do 文件的要点是,一旦它们正确,您就可以节省很多时间,但是没有人 promise 一开始就将 do 文件弄对总是很容易。

我坚定的建议是:修复错误;不要试图忽略它们。

附言capture 在另一个答案中被提及。 capture 可能在本质上看起来很相似,但以相似的风格使用它可能不是一个好主意。

capture 吃掉错误信息,所以用户看不到它们。对于调试,这与所需相反。

capture 实际上是程序员的命令,它的用途是程序员以聪明的方式代表用户并对此保持沉默。

例如,假设提供的变量可以是数字或字符串。如果是数字,我们需要做A;如果它是字符串,我们需要做 B。(A 或 B 可能是“无”。)可能有这样的分支。

  capture confirm str variable myvar 
if _rc { /// it's numeric
<do A>
}
else {
<do B>
}

换句话说,capture 用于处理可预测的问题,如果它们出现的话。这不是为了忽略错误。

关于execution - 有没有办法告诉 Stata 执行整个 do 文件而忽略产生异常(甚至语法错误)的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18625838/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com