如何仅在 stata 16.1 中清除 r() 中的存储结果

how to clear stored results from r() only in stata 16.1

我不确定这是一个错误,但我无法从使用 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

编辑

似乎清除 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().