从宏中查找特定列列表的最大值
Find max of specific list of columns from macro
我已经在我的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()
函数中?
egen
函数 rowmax()
不需要逗号。
egen highest_letter = rowmax(a b c d)
同上,在这里定义局部宏是可有可无的,除非你想用它来做其他用途。无论如何,无论您是否使用宏,都会出现这里的问题;正如您所说,问题是 max()
对 comma-separated 参数的要求。
但鉴于您使用的是宏
local letters : subinstr local letters " " ",", all
是一种插入逗号的方式;当且仅当名称由单个空格分隔时,它才会起作用。如果真实的姓名列表很长或者您正在编写程序或 do 文件,这将比手动插入逗号更快。
我已经在我的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()
函数中?
egen
函数 rowmax()
不需要逗号。
egen highest_letter = rowmax(a b c d)
同上,在这里定义局部宏是可有可无的,除非你想用它来做其他用途。无论如何,无论您是否使用宏,都会出现这里的问题;正如您所说,问题是 max()
对 comma-separated 参数的要求。
但鉴于您使用的是宏
local letters : subinstr local letters " " ",", all
是一种插入逗号的方式;当且仅当名称由单个空格分隔时,它才会起作用。如果真实的姓名列表很长或者您正在编写程序或 do 文件,这将比手动插入逗号更快。