0

我的第一个问题很简单,但在任何地方都找不到任何答案,这让我发疯:

  • 在Stata中定义本地列表时,如果列表真的很长,我该如何回车?

通常///在双引号内时不起作用。

例如,这不起作用:

local reglist "lcostcrp lacres lrain ltmax ///
ltmin lrainsq lpkgmaiz lwage2 hyb gend leducavg ///
lageavg ldextn lfertskm ldtmroad"

当我删除引号时它确实有效,但我被警告我应该包含引号。

我的第二个问题是一个更严重的问题:

  • 定义了 localreglist后,我怎样才能让 Stata 记住它以供后续多次使用(即,不仅仅是一次)?

例如:

local reglist lcostcrp lacres lrain ltmax ///
ltmin lrainsq ///
lpkgmaiz lwage2 ///
hyb gend leducavg lageavg ldextn lfertskm ldtmroad

reg lrevcrp `reglist' if lrevcrp~=.,r
mat brev=e(b)
mat lis brev

/*Here I have to define the local list again.  How do I get Stata to remember 
it from the first time ??? */

local reglist lcostcrp lacres lrain ltmax ///
ltmin lrainsq ///
lpkgmaiz lwage2 ///
hyb gend leducavg lageavg ldextn lfertskm ldtmroad

quietly tabstat `reglist' if lrevcrp~=., save
mat Xrev=r(StatTotal),1
mat lis Xrev

在这里,我定义了 local reglist,然后regression使用这个列表运行 a 并做一些其他的事情。

然后,当我想获取 local 中所有变量的均值时reglist,Stata 不再记得它了,必须重新定义它。这违背了定义列表的全部目的。

如果有人能告诉我如何只定义一次列表并能够随意调用它多次,我将不胜感激。

4

1 回答 1

2

第一个问题的最佳答案是,如果您local在命令中输入长定义,那么(1)您不需要输入回车,您只需继续输入,Stata 将环绕和/或(2 ) 有更好的方法来处理local定义。我通常不会交互式地输入长的本地定义,因为这太乏味且容易出错。

引号对于像您这样的示例不是必需的,仅对于指示带有开始或结束空格的字符串是必需的。

你的第二个问题很神秘。Stata 不会忘记同一个程序中的局部宏定义(广义上),除非您明确地清除该宏,即将它重新定义为一个空字符串。此处程序(广义)表示program(狭义)、do-file、do-file 编辑器内容或主交互会话。你还没有解释为什么你认为会发生这种情况。我怀疑您正在做其他事情,例如在 do-file 编辑器中编写一些代码并结合通过命令窗口交互地编写命令来运行这些代码。这遇到了提到的困难:local宏是local定义它们的程序,因此(在同一示例中)在 do-file 编辑器中定义的宏对于该环境是本地的,但对主交互式会话不可见,反之亦然。

我建议您尝试提供一个 Stata 忘记我们可以自己测试的本地宏定义的示例,但我相信您将无法做到。

于 2013-01-24T17:42:40.383 回答