在宏变量定义中使用 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() 函数将值连接成你想要的字符串。

第二个参数是要放入宏变量的值。