2015-12-17 79 views
0

我想在數據步驟中定義多個宏變量。在這種情況下,我想創建變量&buffer1, &buffer2, &buffer3, &buffer4。 緩衝區的數量是可變的,所以我無法對這些變量的創建進行硬編碼。在宏變量定義中使用do循環索引

下面是數據的步驟,做我現在使用的循環:

%let buffers = 4; 
data buffer; 
    do buffer_number = 1 to &buffers; 
     buffer_queue = 0; 
     buffer_index = 0; 
     output; 
    end; 
run; 

我想要做的就是像%let buffer_buffer_number = 0; do循環中添加一行。這顯然不起作用,因爲它只是創建變量&buffer_buffer_number。是否有一些方法可以使用do循環索引(buffer_number)來創建宏變量?

回答

1

試試call symput()子程序。

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

第一個參數需要一個包含宏變量名稱的字符串。在這裏,我使用CATT()函數將值連接到所需的字符串中。

第二個參數是放入宏變量的值。

+0

使用更新的'call symputx()',因爲它具有更多選項並處理數字變量的自動轉換。 – Tom