Макрос Stata и цикл for, когда есть кавычки и цифры

Предположим, у вас есть макрос

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

Я использую кавычки, чтобы слова были правильно сгруппированы (MERCK SHARP DOHME - это одна компания, а не три разные). Я пытаюсь написать программу, которая перебирает переменную и заменяет ее, когда в качестве подстроки используется одна из строк LabNames.

Давайте начнем с той части кода, которая работает нормально.

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

Этот код работает так, как нужно в моем случае - список 3 разных компаний (не 5). Однако следующий код работает неправильно. Он ломается на 3М.

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?

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 за несколько советов.

Другие вопросы по тегам