问题描述
我想在命令中使用本地宏中的变量列表,例如:
local a int1 int2 num1 num2 bin1 bin2 ...
local b int3 int4 bin3 num3 ...
这里的变量 num*
int*
和 bin*
分别是数字、整数和二进制。
我想对局部 foreach
b' 中的变量运行 a' and
循环,但仅限于整数值的变量,即 int1,int2,int3
,...>
为此,我使用 Nick Cox 创建的 findname
命令来查找整数值的变量,将相应变量名称的列表保存在本地宏中。但我不想为数据集中的所有变量运行它,而只想为变量的子集(在局部变量 a
、b
等中指定)运行它,然后在后续命令中使用该列表.
因此,对于本地 a' and
b' 是本地 a_int' and
b_int' 中的整数变量列表,我想使用如下:
foreach var of varlist `a_int' `b_int'{
whatever command
}
解决方法
如果我理解正确,您需要存储在本地宏中的两个列表的交集。为此,您可以使用宏扩展函数来操作列表:参见 help macrolists
。
// Setup
local a x1 x2 x3 x4 x5
local b x4 x5 x6 x7 x8
local int x2 x3 x6
// Get intersection of variable lists and integer list
local a_int : list a & int
local b_int : list b & int
// Put a_int and b_int together and drop possible duplicates
local ab_int `a_int' `b_int'
local ab_int_uniq : list uniq ab_int
// Do something
foreach var of varlist `ab_int_uniq' {
* do something
}