通过将字符串与Stata循环中的数字连接来定义变量

时间:2013-09-01 04:46:28

标签: concatenation stata

我是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
}

1 个答案:

答案 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"

这里要记住的要点(直到他们毫不费力地知道)是

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

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

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