Цикл по переменным с подстановочными знаками в локальных макросах

Предположим, у меня есть набор данных переменных со следующими именами (обратите внимание на заглушку x а также hm):

x9, xdog, x_99, hma8j, hm40, hm0

Я хочу разработать программный способ предоставления списка имен переменных (которые могут содержать символы подстановки), а затем перебрать каждое имя переменной для recode все значения меньше 0 с отсутствующим значением (.).

На практике у меня много столбцов, и я хочу только recode некоторые из них. Я не хочу использовать индекс столбца или диапазоны, потому что я не знаю их, так как мои данные большие.

Мой подход включает в себя следующие шаги:

  1. Создать локальный макрос с именем myvars содержащие имена переменных с подстановочными знаками

    local myvars x* hm*
    
  2. Разверните строки в списке переменных, чтобы они содержали строки с полным именем переменной (это должно привести к исходным именам переменных):

    syntax 'myvars'
    
  3. Прокрутите список имен переменных, чтобы установить значения на пропущенные:

    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, ничто не заменит чтение хотя бы первой половины Руководства пользователя.

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