首页 > 解决方案 > 循环内的Stata if条件

问题描述

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

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

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

标签: statastata-macros

解决方案


您要求的代码更接近

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显然根本不需要提及。(如果是这样,那么您的代码由于某些其他原因是错误的。)


推荐阅读