2017-02-06 13 views
0

Я объявил местный макрос, который соответствует нескольким именам переменных в моем проекте Stata:Stata - найти максимум из определенного списка столбцов из макро

local letters a b c d 

Я хочу, чтобы иметь возможность создавать новую переменную, используя все переменные в макро letters:

gen highest_letter = max(`letters') 

Однако, это не работает, и приводит к следующему сообщению об ошибке:

a b c d not found 

Это потому, что max() требует, чтобы вход должны быть разделены запятыми, как:

gen highest_letter = max(a, b, c, d) 

Есть ли способ для меня, чтобы манипулировать макро letters, или использовать функцию, отличную от max(), так что я могу найти наивысшее значение в списке переменных без ручной установки их в функцию «max()»?

ответ

1

egen Функция rowmax() не требует запятых.

egen highest_letter = rowmax(a b c d) 

Как указано выше, определение локального макроса здесь не допускается, если вы не хотите его для какой-либо другой цели. В любом случае проблема здесь возникает независимо от того, используете ли вы макрос; проблема, как вы говорите, является требованием max() для разделенных запятыми аргументов.

Но учитывая, что вы используете макрос

local letters : subinstr local letters " " ",", all 

способ вставить запятые; он будет работать тогда и только тогда, когда имена будут разделены одиночными пробелами. Если реальный список имен очень длинный или вы пишете программу или делаете файл, это будет быстрее, чем вставка запятых вручную.