%macro year(YY,MM);
data temp;
n=&
MM.; /*宏变量&MM的值赋给n,同时n作计数*/
format n
z2.;
do while(n<
13);
format n
z2.;
call symput(
'MM',n); /*将计数n的值赋给宏变量MM,更新MM的值*/
%report(&
YY.&
MM); /*
调用report宏*/
n+1;
output;
end;
run;
%mend year;
%year(2010,10);
---------------------------------------------------------------------------------------------------------------------------
一.
report就是循环中放入的宏,单独跑都没问题。加入循环之后,出现问题如下:
问题1. 日志出现,
ERROR: 有 1 个未闭合的“DO”块。是什么意思?
问题2. report宏只运行一遍,就报错无法循环
报错如下:
180: 无法确定 LINE 和 COLUMN。
NOTE: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 180-322: 语句无效或未按正确顺序使用。
MPRINT(YEAR): n+1;
180: 无法确定 LINE 和 COLUMN。
NOTE: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 180-322: 语句无效或未按正确顺序使用。
MPRINT(YEAR): output;
180: 无法确定 LINE 和 COLUMN。
NOTE: NOSPOOL 已打开。用 OPTION SPOOL 重新运行可恢复出错的 LINE 和 COLUMN。
ERROR 180-322: 语句无效或未按正确顺序使用。
MPRINT(YEAR): end;
MPRINT(YEAR): run;
请帮忙分析下这个do while循环,是不是因为 call symput(
'MM',n) 语句是赋值字符型的关系? ,而n是数值型