下面是一個快速示例,顯示如何在宏的上下文中執行此操作。運行這個,你可以在日誌中看到發生了什麼。
* 'week' is in scope within the macro only
and iterates because of %do loop (no need
to explicitly increment it ;
%macro test1;
%do week=1 %to 10;
%put &week;
%end;
%mend;
%test1
* sum has global scope ;
%let sum=0;
* 'week' acts as per test1 above, but we
explicitly manipulate 'sum' within each iteration ;
%macro test2;
%do week=1 %to 10;
%let sum=%eval(&sum+&week);
%put in macro: week is &week, sum is now ∑
%end;
%mend;
%put before macro executes, sum is ∑
%test2
%put after macro executes, sum is now ∑
我認爲您需要重新閱讀關於宏變量分辨率的doco,以及SAS令牌如何編譯和編譯代碼。有幾個問題,最主要的是你不能在開放代碼中這樣做,但是你可以在宏的上下文中使用'%do&week = 1%到53; <做某事>; %端;'。另一個問題(用你發佈的示例代碼)是,你使用'i'作爲你的迭代器變量,但試圖增加一個名爲'week'的變量。 – sasfrog
好的..我可以在do循環中做些什麼來修改宏變量嗎? – user1946152
你能否提供更多關於你在循環中做什麼的細節。你當前的語法是不正確的,但是我猜測你已經過了複雜的問題(即你希望宏變量周的值與循環變量i相同)。我們需要看看你如何在循環中使用這兩個值。 – Longfish