Stata if 循环中的条件

Stata if condition within a loop

我正在尝试编写一个带有宏变量的循环,该变量将根据循环的迭代值而改变。请参阅下面的代码。

我想遍历代码值“QLD”和“DDM”,如果代码为“QLD”,我希望本地宏索引等于“QQQ”,否则为“DIA”。

foreach ticker in "QLD" "DDM"{
    if `ticker'="QLD"{
        local index = "QQQ"
    }
    else{
        local index = "DIA"
    }
    di `index'
}

你要的码更近

foreach ticker in QLD DDM {
    if "`ticker'" == "QLD" local index = "QQQ"
    else local index = "DIA"
    
    di "`index'"
}

您的代码中有两个错误,并且代码比您需要的多。错误是在需要的地方省略了引号,并使用 = 来测试相等性。

这个选择本身不需要循环:

   local index = cond("`ticker'" == "QLD", "QQQ", "DIA") 
   di "`index'" 

事实上,正如上面的命令所示,DDM 显然根本不需要提及。 (如果是这样,那么您的代码由于其他原因是错误的。)