【问题标题】:Use do loop index in macro variable definition在宏变量定义中使用 do 循环索引
【发布时间】:2015-12-17 19:30:29
【问题描述】:

我想在一个数据步骤中定义多个宏变量。在这种情况下,我想创建变量&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)来创建宏变量吗?

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    试试call symput() 子例程。

    call symput(catt("buffer_",buffer_number),0);
    

    第一个参数采用包含宏变量名称的字符串。这里我使用 CATT() 函数将值连接成你想要的字符串。

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

    【讨论】:

    • 使用较新的call symputx(),因为它有更多选项并处理数字变量的自动转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多