从宏中查找特定列列表的最大值

时间:2017-02-06 15:07:35

标签: max stata stata-macros

我已经声明了一个与我的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 个答案:

答案 0 :(得分:1)

egen函数rowmax()不需要逗号。

egen highest_letter = rowmax(a b c d)

如上所述,除非您将其用于其他目的,否则在此处定义本地宏是可有可无的。无论如何,无论你是否使用宏,都会出现问题。正如您所说,问题是max()对逗号分隔的参数的要求。

但鉴于您使用的是宏

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

是一种插入逗号的方法;当且仅当名称由单个空格分隔时,它才会起作用。如果真正的名称列表很长或者您正在编写程序或执行文件,那么它将比手动插入逗号更快。