循环中的Stata if条件

循环中的Stata if条件,stata,stata-macros,Stata,Stata Macros,我试图用一个宏变量编写一个循环,该宏变量将根据循环的迭代值而变化。请参阅下面的代码 我想循环遍历ticker值“QLD”和“DDM”,如果ticker为“QLD”,则本地宏索引等于“QQQ”,否则为“DIA” 您要求的代码更接近 foreach ticker in QLD DDM { if "`ticker'" == "QLD" local index = "QQQ" else local index = "D

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

我想循环遍历ticker值“QLD”和“DDM”,如果ticker为“QLD”,则本地宏索引等于“QQQ”,否则为“DIA”


您要求的代码更接近

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

您要求的代码更接近

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

尽管您所说的在许多语言中都被称为变量,但在Stata中它通常被称为局部宏,而不是局部变量。Stata变量(仅)是数据集中的变量(含义、字段或列)。(Mata是一个不同的故事,但反过来说,它本身没有局部宏的概念。)虽然在许多语言中,您所谈论的被称为变量,但在Stata中,它通常被称为局部宏,而不是局部变量。Stata变量(仅)是数据集中的变量(含义、字段或列)。(Mata是一个不同的故事,但反过来说,它本身没有本地宏的概念。)非常感谢,这似乎是可行的。我简化了问题,以便您能更快地找到解决方案,因此我认为DDM实际上是必要的。如果真正的问题不同,那么(好的)答案也可能不同,但您必须告诉我们。非常感谢,这似乎有效。我简化了问题,以便你能更快地找到解决方案,因此我认为DDM实际上是必要的。如果真正的问题不同,那么(好的)答案也可能不同,但你必须告诉我们。