【问题标题】:Stata - postfile errorStata - postfile错误
【发布时间】:2014-01-16 19:46:24
【问题描述】:

为什么我得到一个“无效名称”(见最后一行)?

tempname vector
postfile `vector' beta_lag    beta_const /// 
              se_mvalue   se_const   /// 
          using vettore, replace

xtreg Perf lag if t>=396 & t<=408
post `vector' (_b[lag])  (_b[_cons]) ///
              (_se[lag]) (_se[_cons])

结果:

. (regression is ok, omitted result...)
. post `vector'  (_b[lag])  (_b[_cons]) (_se[lag]) (_se[_cons])
( invalid name

提前谢谢你

【问题讨论】:

  • 您是否将它作为一个代码块在同一个地方运行?如果没有,Stata 可能无法看到名称 vector 并在 ( 作为下一个标记和不可接受的句柄时窒息。
  • 我从 .do 执行它,我选择了一段代码(加载数据后)和 ctrl+D。
  • 然后尝试将代码作为一个整体运行。
  • 这就是我正在做的,很明显。它停止在那个错误
  • 我无法重现您的问题,仅将自动数据集中的 -xtreg- 语句更改为 -regress- 并更改 -post- 语句中的变量标识。我建议将您的 -post- 语句从您的 Stackoverflow 帖子复制并粘贴到 Stata 编辑器中。另外,打开一个新的do文件编辑器;复制并粘贴到其中;但要手写-post-语句。

标签: stata postfile


【解决方案1】:

与断言相反,您在做什么并不明显。此代码段说明了技术,您应该能够无错误地重现其运行。

webuse nlswork, clear 
xtset idcode
tempname myout 
postfile `myout' constant grade age using myout.dta
xtreg ln_w grade age 
post `myout' (_b[_cons]) (_b[grade]) (_b[age]) 
postclose `myout' 
describe using myout 

这个例子表明使用_b[_cons]这样的表达式是可以的,以防有任何疑问。

我的猜想仍然是post 命令看不到临时名称(在您的示例中为vector),因此将其评估为空字符串。它检测到的第一个令牌是第一个(,它不能是可接受的文件句柄的一部分,因此它会抱怨。

如果您在不同的语言环境中定义tempname,则可能(将)出现此问题。例如,这可能是部分代码在主交互式会话中运行,部分来自 do-file 或 do-file 编辑器。如果您选择要部分运行的代码(例如,选择单独的行并单独运行它们),也可能是这样。

【讨论】:

  • 谢谢,运行完整的代码。我根本没想到这可能是问题所在,很抱歉没有从一开始就发布代码,我认为问题可能与那几行无关。你知道如何只运行来自 xtreg 的部分代码而没有错误吗?也许以前将“向量”定义为全局宏?
  • 如果您将vector 定义为全局宏,它将在任何地方可见。然而,糟糕的风格,不应该那样做。
  • 问题是,代码的第一行(我没有报告)执行起来很长(它必须导入一个非常大的数据集),我不确定第二部分是否(我报告的那个)会起作用或需要一些调整。所以每次我找到要纠正的地方时,我都试图只运行第二部分。如果没有必要,“良好做法”的替代方案应该是什么? (再次感谢您之前的回答)。
  • 同样的问题,同样的答案。如果您使用临时名称,则无论在何处使用它们都必须是可理解的,因此无法在未定义的代码中引用临时名称。这是一般编程原则的一个例子,所以没什么新意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
相关资源
最近更新 更多