我是一个在Stata土地上挣扎的R爱好者.我试图从R"转换"到Stata时遇到了以下问题:
在R中,所以我的脚本文件不会变得太大和疯狂我喜欢用较小的部分编写它们然后有一个主要的R脚本读取较小的部分,例如
source("script-1.R")source("script-2.R") 等等......我想在Stata做同样的事情,并尝试过
do "script-1.do"do "script-2.do" 等等......但是,我发现如果我在script-1.do例如创建一个宏,那么local bird 1
对象/宏鸟在主脚本中是不可访问的或可访问的script-2.do.如果我尝试显示bird主脚本中的内容,它只是空的.
为什么是这样?有什么建议?
Stata宏分为两组:local和global.这些local只存在于定义它们的过程中(可以是交互式会话,执行文件或a program).如果您定义了某些内容script-1.do,它将只存在于那里,您必须明确地return将其显示在其他位置.(Do-files不能真正做到这一点;你必须定义一个program, rclass返回值,并将代码块分成programs是一个很好的做法.)global除非绝对,不可避免地需要使用宏.
R可以控制其对象的范围,但与Stata对宏的控制相比,它几乎没有任何好处.变量和数据集在Stata中仍然是全局的,并且一次不能有多个数据集.Stata的另一件事是令人惊喜的是通过引用传递参数,与R传递值相比,这节省了大量内存.因此,不同的包具有不同的优势,并且说一个比另一个更好是短视的.
话虽如此,基思的使用建议include是正确的.我只是试着解释你问题的"为什么"部分.此外,如果您需要在程序之间交换的是一个数字,则可以将其存储在scalar对所有进程可见的显式命名中.