Stata中与R命令“source”相当的命令是什么?

3
我是一名R语言爱好者,正在努力学习Stata。在尝试将R代码“翻译”成Stata代码时,我遇到了以下问题:
为了避免我的脚本文件变得过于庞大和复杂,我喜欢将它们分成较小的部分编写,然后有一个主要的R脚本读取这些小文件,例如:
  1. source("script-1.R")
  2. code blah1
  3. code blah2
  4. source("script-2.R") 等等......
我想在Stata中做同样的事情,已经尝试过:
  1. do "script-1.do"
  2. code blah1
  3. code blah2
  4. do "script-2.do" 等等......
然而,我发现如果我在 script-1.do 中创建一个宏,比如local bird 1,那么对象/宏bird就无法在主脚本中访问或者在script-2.do中访问。如果我试图在主脚本中显示bird的内容,它就是空的。
为什么会这样?有什么建议吗?

4
我建议您查看过去提供给您的一些问题的答案,并检查其中是否有可以标记为“可接受”答案的选项。别忘了您也可以对那些有帮助的答案进行投票:这是帮助未来访问者识别特定问题相关响应的最佳方式。 - chl
2个回答

7
尝试使用include。您可以在此处阅读有关includedo(或run)之间差异的内容:

. help include


6
Stata中的宏分为两组:localgloballocal仅存在于定义它们的过程中(可以是交互式会话、do-file或program)。如果您在script-1.do中定义了某些内容,它将仅存在于那里,您必须明确地return它才能在其他地方看到。(虽然do-files实际上无法这样做;您必须定义一个program, rclass来返回值,并将代码块分解为program是一个好习惯。)除非绝对必要,否则避免使用global宏。
R对其对象的范围有一定控制,但与Stata对宏的控制相比,它远远不够好。在Stata中,变量和数据集仍然是全局的,而且您不能同时拥有多个数据集。另外一个让您惊喜的事情是,Stata通过引用传递参数,与R的按值传递相比,可以节省大量内存。因此,不同的软件包具有不同的优势,说其中一个更好是短视的。
话虽如此,Keith建议使用include是正确的。我只是试图解释您问题的“为什么”部分。此外,如果您需要在程序之间交换的是数字,则可以将其存储在明确命名的scalar中,该scalar将对所有进程可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接