在宏变量定义中使用 do 循环索引
Use do loop index in macro variable definition
我想在一个数据步骤中定义多个宏变量。在这种情况下,我想创建变量 &buffer1, &buffer2, &buffer3, &buffer4
。
缓冲区的数量是可变的,所以我无法对这些变量的创建进行硬编码。
这是我目前使用的数据步骤和循环:
%let buffers = 4;
data buffer;
do buffer_number = 1 to &buffers;
buffer_queue = 0;
buffer_index = 0;
output;
end;
run;
我想做的是在 do 循环中添加一行,如 %let buffer_buffer_number = 0;
。这显然是行不通的,因为它只是创建变量 &buffer_buffer_number
。有什么方法可以使用 do 循环索引 (buffer_number) 来创建宏变量吗?
尝试 call symput()
子例程。
call symput(catt("buffer_",buffer_number),0);
第一个参数采用包含宏变量名称的字符串。这里我使用 CATT() 函数将值连接成你想要的字符串。
第二个参数是要放入宏变量的值。
我想在一个数据步骤中定义多个宏变量。在这种情况下,我想创建变量 &buffer1, &buffer2, &buffer3, &buffer4
。
缓冲区的数量是可变的,所以我无法对这些变量的创建进行硬编码。
这是我目前使用的数据步骤和循环:
%let buffers = 4;
data buffer;
do buffer_number = 1 to &buffers;
buffer_queue = 0;
buffer_index = 0;
output;
end;
run;
我想做的是在 do 循环中添加一行,如 %let buffer_buffer_number = 0;
。这显然是行不通的,因为它只是创建变量 &buffer_buffer_number
。有什么方法可以使用 do 循环索引 (buffer_number) 来创建宏变量吗?
尝试 call symput()
子例程。
call symput(catt("buffer_",buffer_number),0);
第一个参数采用包含宏变量名称的字符串。这里我使用 CATT() 函数将值连接成你想要的字符串。
第二个参数是要放入宏变量的值。