Stata 继承循环变量或局部、全局宏
Stata 继承循环变量或局部、全局宏,stata,stata-macros,Stata,Stata Macros,main.do是: foreach mode in mode1 mode2 { do run.do } 而run.do是: foreach y in y1 y2{ reg `y' x outreg2 using `y'.xls, append ctitle(`mode') } 它有outreg2,因此产生了一个txt输出。但是我发现列标题是空的,这意味着Stata无法获得模式 这意味着main.do中的mode循环未被run.do继承 我怎样才能把它继承下来?如果我能选择是否继承它,
main.do
是:
foreach mode in mode1 mode2 {
do run.do
}
而run.do
是:
foreach y in y1 y2{
reg `y' x
outreg2 using `y'.xls, append ctitle(`mode')
}
它有outreg2
,因此产生了一个txt输出。但是我发现列标题是空的,这意味着Stata无法获得模式
这意味着main.do
中的mode
循环未被run.do
继承
我怎样才能把它继承下来?如果我能选择是否继承它,那就太好了
我尝试的是:
foreach mode in mode1 mode2 {
global mode `mode'
do run.do
}
以及:
以及:
但是什么都不起作用。本地宏是。。。。地方的这意味着仅在同一交互式会话、程序、do文件或do文件编辑器窗口中的(一块)代码中可见 Globals是一种使东西随处可见的粗糙解决方案,但您必须使用
$
来引用它们。所以在你的跑步中,你需要
ctitle($mode)
将内容作为参数传递是一个更好的解决方案
另请参见包含的帮助
所有这些都是非常基本的Stata编程。要想成为一名有能力的Stata程序员,只需提供一个最低限度的参考资料,该参考资料也会与您的系统上的Stata捆绑在一起(除非您的版本已经过时几年) 下面的代码片段展示了@Nick在您的示例上下文中的出色建议
1.更改run.do
以调用全局宏而不是本地宏:
2.将run.do
转换为程序,并将本地宏模式
作为参数传递:
3. 包括文件run.do
在main.do中按原样执行:
最后一种方法更接近您正在寻找的“继承”解决方案。本地和全局宏在Stata中不被视为变量。当然,它们松散地对应于其他地方称为变量的实体,但Stata的使用是严格的和统计的:Stata中的变量是(并且只是)数据集中的一列。有关更多讨论,请参见例如。
foreach mode in mode1 mode2 {
global mode "`mode'"
do run.do
}
ctitle($mode)
foreach mode in mode1 mode2 {
global mode `mode'
do run.do
}
foreach y in y1 y2 {
reg `y' x
outreg2 using `y'.xls, append ctitle($mode)
}
macro drop mode
program define foo
foreach y in y1 y2{
reg `y' x
outreg2 using `y'.xls, append ctitle(`1')
}
end
foreach mode in mode1 mode2 {
foo `mode'
}
foreach mode in mode1 mode2 {
include run.do
}