1

我是编程新手Stata。我的问题是在一个循环中运行几对回归,如下所示:

reg outcome1 outcome2 covariates
reg outcome2 outcome1 covariates

我尝试了以下方法,但前两种方法带有错误“模糊的缩写”,第二种方法是错误“指定的变量太少”。谁能帮我解决它?

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
}
4

1 回答 1

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"

这里要记住的要点(直到它们不费吹灰之力地被人们知道)是

  1. 宏操作提供了一种处理变量名称而不是变量内容的方法。

  2. Stata 在尝试执行命令之前会进行所有宏替换。

我写了http://www.stata-journal.com/sjpdf.html?articlenum=pr0005作为 Stata 中循环的教程回顾,包括使用本地宏。

于 2013-09-01T08:43:16.353 回答