【问题标题】:how to clear stored results from r() only in stata 16.1如何仅在 stata 16.1 中从 r() 中清除存储的结果
【发布时间】:2020-09-22 14:41:21
【问题描述】:

我不确定这是一个错误,但我无法从使用return clear 存储的 r() 中清除结果。 ereturn clear 用于清除 e() 中存储的结果。 results clear 也有效,但会清除所有结果。

有没有办法只清除 r() 中存储的结果?

原因是我根据某些条件为不同的变量运行相同的程序。清除结果将确保返回的结果始终是“新鲜的”,而不是来自之前运行的程序的结果...

用于繁殖

clear
sysuse auto

qui reg mpg rep78, r

* works
ereturn list
ereturn clear
ereturn list

* does not work
return list
return clear
return list // still there!

* workaround
qui reg mpg rep78, r
clear results 
return list
ereturn list

编辑

  • 在 windows 和 linux 上使用 stata 16.1。同样的问题。

【问题讨论】:

  • 这是个好问题。

标签: stata


【解决方案1】:

似乎清除r() 结果的唯一方法是声明rclass 程序。这有点令人不满意,而且我相信,您的问题的解决方案是您担心您的程序产生的r() 结果不会是新鲜的。

基于this Statalist discussion,下面的示例演示了这种行为,而且——如果你想大方一点——实际上是一个清除r()结果的程序。

program rclassclear , rclass
    return local rclassclear
end

sysuse auto , clear
quietly summarize mpg

rclassclear

return list

请注意,documentation 在“将结果存储在 r()”下指出了 r()return() 之间的区别:

  • r() 是返回的结果和
  • return() 是要返回的组装结果。

return clear 清除 return() 而不是 r()

【讨论】:

  • 感谢您的回答。相当优雅,虽然“有点不满意”,但非常非常轻微:)。感谢您指出 r() 和 return() 之间的区别。我没有意识到这一点。也许这个问题(不清除返回的 r())与允许从另一个程序中的前一个程序访问 r() 值有关。无论如何,您的解决方法确实“解决”了这个问题。
  • 谢谢!对你的观点:“原因是我根据某些条件为不同的变量运行相同的程序。清除结果将确保返回的结果始终是“新鲜的”,而不是来自之前运行的程序的结果。”运行 any rclass 程序将清除 r(),然后使用任何返回的结果重新填充。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多