我是Stata
编程的新手。我的问题是在循环中运行几对回归,如下所示:
reg outcome1 outcome2 covariates
reg outcome2 outcome1 covariates
我尝试了以下方法,但前两个带有错误“ambiguous abbreviation”,第二个带有错误“指定的变量太少”。有人可以帮我解决吗?
foreach dv in x y z {
local outcome1 = `dv' + "1"
local outcome2 = `dv' + "2"
reg `outcome1' `outcome2' covariates
reg `outcome2' `outcome1' covariates
}
foreach dv in nduration nsleep nwaso nlatency nfragmentation npctsleep {
gen outcome1 = `dv' + "1"
gen outcome2 = `dv' + "2"
reg `outcome1' `outcome2' covariates
reg `outcome2' `outcome1' covariates
}
foreach dv in x y z {
reg `dv'1 `dv'2 covariates
reg `dv'2 `dv'1 covariates
}
答案 0 :(得分:3)
你要问的是不清楚的,因为你的第三个解决方案应该有效,只要你拼出协变量名称。
这里的连接只是并列,但你需要将名称连接成字符串。您不需要在示例中创建宏。
foreach dv in x y z {
reg `dv'1 `dv'2 covariates
reg `dv'2 `dv'1 covariates
}
第二个解决方案是错误的,因为从Stata的角度来看,你试图在每个generate
命令中添加一个数字变量和一个文字字符串。
使用像
这样的行,第一个解决方案会更好local outcome1 "`dv'1"
使字符串操作显式,但如上所述,您不需要这个额外的宏。
这也应该有用
local outcome1 = "`dv'" + "1"
这里要记住的要点(直到他们毫不费力地知道)是
宏操作提供了一种处理变量名称而不是变量内容的方法。
Stata在尝试执行命令之前执行所有宏替换。
我写了http://www.stata-journal.com/sjpdf.html?articlenum=pr0005作为Stata中循环的教程回顾,包括使用本地宏。