1

假设你有宏

global LabNames "3M"  "ABBOTT"  "MERCK SHARP DOHME"

我使用引号是为了正确分组单词(MERCK SHARP DOHME 是一家公司,而不是三家不同的公司)。我正在尝试编写一个程序来遍历一个变量并在它具有 LabNames 字符串之一作为子字符串时替换它。

让我们从可以正常工作的代码部分开始。

foreach company of global LabNames {
     display "`company'"
}

在我的情况下,此代码根据需要进行 - 列出了 3 家不同的公司(不是 5 家)。但是,以下代码无法正确运行。3M 就坏了。

gen hasLab = 0

foreach company of global LabNames {
     display "`company'"
     replace hasLab = (index(lab,`"`company'"'))
     replace lab = `"`company'"' if hasLab > 0 
}

如果我们将此代码应用于

    lab
    asdf 3M
    3M
    ABBOTT
    ABBOTT asdf
    MERCK SHARP DOHME AS
    MERCK SHARP DOHME 4

我们得到

    lab
    3M
    asdf 3M
    ABBOTT
    ABBOTT
    MERCK SHARP DOHME
    MERCK SHARP DOHME

您知道该怎么做才能使代码正确处理 3M 案例吗?

4

1 回答 1

1

您的全局中有不必要的引号。越来越乱了 看

. global LabNames "3M" "ABBOTT" "MERCK SHARP DOHME"
. mac list LabNames
LabNames:       3M" "ABBOTT" "MERCK SHARP DOHME

你可以输入

global LabNames 3M ABBOTT "MERCK SHARP DOHME" 

看到help macrolists一些提示。

于 2012-06-28T02:28:32.400 回答