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