Stata中R命令“source”的等价物是什么?

时间:2012-04-24 15:13:43

标签: r stata

我是一名在Stata土地上挣扎的R爱好者。我在尝试从R“转换”为Stata时遇到了以下问题:

在R中,所以我的脚本文件不会变得太大和疯狂我喜欢用较小的部分写它们然后有一个主要的R脚本读取较小的部分,例如

  1. source("script-1.R")
  2. code blah1
  3. code blah2
  4. source("script-2.R")等......
  5. 我想在Stata做同样的事情,并尝试过做

    1. do "script-1.do"
    2. code blah1
    3. code blah2
    4. do "script-2.do"等......
    5. 但是,我发现如果我在script-1.do中创建一个宏,例如local bird 1 对象/宏鸟在主脚本中无法访问或script-2.do可访问。如果我尝试在主脚本中显示bird的内容,则它只是空的。

      这是为什么?有什么建议吗?

2 个答案:

答案 0 :(得分:6)

尝试使用include。您可以在此处了解includedo(或run)之间的差异:

  

. help include

答案 1 :(得分:6)

Stata宏分为两组:localgloballocal仅存在于定义它们的过程中(可以是交互式会话,执行文件或program)。如果您在script-1.do中定义了某些内容,那么它只会在那里存在,您必须明确return才能在其他地方看到它。 (Do-files不能真正做到这一点;你必须定义一个program, rclass来返回值,并将代码块分成program是一个很好的做法。)避免{{1} }宏除非绝对,不可避免地需要。

R可以控制其对象的范围,但与Stata对宏的控制相比,它几乎没有任何好处。变量和数据集在Stata中仍然是全局的,并且一次不能有多个数据集。 Stata的另一件事是令人惊喜的是通过引用传递参数,与R传递值相比,这节省了大量内存。因此,不同的包具有不同的优势,并且说一个比另一个更好是短视的。

话虽如此,基思建议使用global是正确的。我只是试着解释你问题的“为什么”部分。此外,如果您需要在程序之间交换的是一个数字,您可以将其存储在一个明确命名的include中,该scalar将对所有进程可见。