全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6334 9
2011-11-16
%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是数值型
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-11-16 12:50:04
data步中声明的宏变量,无法用这种方式在data步内调用
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-16 13:28:35
那请问有什么办法吗?

我想把计数的n每加一,同时将宏变量 &MM 也更新为n的值。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-16 14:00:59
lprince233 发表于 2011-11-16 13:28
那请问有什么办法吗?

我想把计数的n每加一,同时将宏变量 &MM 也更新为n的值。
复制代码
这是一种方法,仅供参考......
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-16 14:30:17
哦,谢谢。另外还有宏可以嵌套么?
比如
%macro A(b);
/宏内容内容省略/
%mend A;

%macro T(n);
   %A(&n);
%mend T;

请问可以调用当前宏的宏变量&n,作为宏A的参数么?
我试了下好像无法调用。

其实意思就是参数是否必须为实参。
   


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-11-16 14:30:34
发重复了。。编辑掉

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群