【问题标题】:Invalid name when running do file运行do文件时名称无效
【发布时间】:2017-09-16 01:45:25
【问题描述】:

运行以下代码时出现“无效名称”

foreach i in 2008 2009 2010 2011{
disp `"Working in Year `i'"'
tostring `i', local(yearStr)
disp `"yearStr"'
graph bar E if Year=="'i'", c(1) name ('i',replace)
histogram E if Year=="`i'", c(1) name (`yearStr',replace)
}

我要做的是通过从我已经输入的数据集中选择年份 2008 2009 2010 2011 在年份和“E”之间绘制一个图表条。但是每当我尝试运行代码时,都会发现同样的错误。

错误:

    Working on year 2008
2008 invalid name
r(198);

【问题讨论】:

  • -1 因为缺乏研究。您的某些语法是幻想语法。您需要在编码时更仔细地研究文档。
  • 不要破坏你的帖子。

标签: graph histogram stata


【解决方案1】:

这里有几个错误和误解。

您的代码在 tostring 2008 上失败,因为 tostring 需要变量名称。 tostring 也不支持 local() 选项,但 Stata 并没有那么远。但是,这里根本不需要字符串转换。宏一个字符串。

你的代码可以改写为

forval i = 2008/2011 {
    graph bar E if Year == "`i'", subtitle(`i') name(B`i', replace)
    histogram E if Year == "`i'", subtitle(`i') name(H`i',replace)
}

出现的一些细节:

  1. 警告。为此,Year 必须是一个字符串变量,这在其他地方听起来没什么用。 Year 作为数字会更好。

  2. 语法。我将宏标点符号更正为不同的左右引号。

  3. 语法。我取消了选项c(1)。你期望它做什么?我知道没有这样的相关选项。也许您想连接一条线,即c(l),除非这不适用于这些命令中的任何一个。

  4. 样式。您的代码的意图似乎是获取宏 i 的内容并将其放入另一个宏 yearStr 中。没有必要这样做。

  5. 语法。 name() 最好没有空格,纯数字不能是合法的图形名称。

  6. 意图。在您的代码中,宏 iyearStr 将具有相同的内容,您偶然尝试(例如)创建一个名称为 2008 的图形,然后覆盖它,因为下一个图形将具有相同的名称。如上所述,语法无论如何都是非法的,但只有不同的名称才有意义。

  7. 图表样式。最好将年份作为文本放在每个图表上,以解释每个图表显示的内容。

  8. 意图。 di "yearStr" 行将只显示文字 yearStr。它不会显示具有该名称的本地宏。 (我简化了复合双引号。)

话虽如此,四年后,你可能会过得更好

graph bar E, by(Year) 
histogram E, by(Year) 

但是,如果每年只有一个 E 值,您可能需要更像

twoway bar E year, base(0) 

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2016-08-23
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多