Цикл по переменным с подстановочными знаками в локальных макросах
Предположим, у меня есть набор данных переменных со следующими именами (обратите внимание на заглушку x
а также hm
):
x9, xdog, x_99, hma8j, hm40, hm0
Я хочу разработать программный способ предоставления списка имен переменных (которые могут содержать символы подстановки), а затем перебрать каждое имя переменной для recode
все значения меньше 0 с отсутствующим значением (.
).
На практике у меня много столбцов, и я хочу только recode
некоторые из них. Я не хочу использовать индекс столбца или диапазоны, потому что я не знаю их, так как мои данные большие.
Мой подход включает в себя следующие шаги:
Создать локальный макрос с именем
myvars
содержащие имена переменных с подстановочными знакамиlocal myvars x* hm*
Разверните строки в списке переменных, чтобы они содержали строки с полным именем переменной (это должно привести к исходным именам переменных):
syntax 'myvars'
Прокрутите список имен переменных, чтобы установить значения на пропущенные:
foreach x of local 'myvars' { replace 'x' = . if 'x' < 0 }
Тем не менее, я не могу понять, как включить подстановочные знаки в for
петля. Приведенный выше код не работает и выдает invalid syntax
ошибки.
Я нашел полезными следующие темы в Statalist, но они не дают решения, и использование заглушек не кажется эффективным:
Может кто-нибудь мне помочь?
2 ответа
foreach x of varlist x* h* {
replace `x'= . if `x' < 0
}
отсюда:
http://www.cpc.unc.edu/research/tools/data_analysis/statatutorial/labor_saving/loops
Ответ @timat дает хорошее базовое решение, но не объясняет, что вы делаете неправильно.
Похоже, вы запутались на нескольких уровнях:
Как ссылаться на локальные макросы
Используйте одинарные кавычки слева и справа, а не повторяющиеся (справа) одинарные кавычки:
. local foo = 42
. di `foo'
42
Как лучше распаковать список переменных шаблона
syntax
сделаю это, но как foreach
сделаю это напрямую, syntax
является излишним для вашей проблемы. Но даже тогда ваш syntax
Пример совершенно неверен по нескольким причинам. Поскольку его использование не является необходимым, я не буду останавливаться на этом.
Разница между именем макроса и его содержимым
foreach x of local `myvars' {
(обратите внимание на исправленную пунктуацию) почти никогда не то, что вам нужно. Обычно будет
foreach x of local myvars {
Колонна мышления
Stata не является программой для работы с электронными таблицами. Столбцы могут быть вашим личным словом и не причинят вреда, но индексы столбцов напрямую не поддерживаются.
Как найти ответы
Вы (я полагаю) ищите ответы, а не пытаетесь читать документацию Stata. Существует много последних, и начинающим сложно понять, где искать, но основная помощь по foreach
и связанные объяснения более действительны, чем цитируемые вами сообщения. Они оба хороши (в свою очередь, я написал оба...), но на некотором расстоянии от вашей проблемы, и неудивительно, что вы не нашли ответа на свой вопрос также. Если вы хотите освоить базовую Stata, ничто не заменит чтение хотя бы первой половины Руководства пользователя.