全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4335 2
2016-09-08

程序如下;
%macro setymcurr(ns=);
data _null_;
set ymtot(firstobs=&ns. obs=&ns.);
call symput('ymcurr',ymcurr);
run;

%mend;
data _null_;
   do i=1 to 2;
    %setymcurr(ns=1);
    put &ymcurr.;
   end;
run;
结果如下:
  data _null_;
31            do i=1 to 2;
32             %setymcurr(ns=1);
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒
      
NOTE: 由调用宏“SETYMCURR”生成行。
32              data _null_;  set ymtot(firstobs=&ns. obs=&ns.);  call symput('ymcurr',ymcurr); run;
               _
               117

ERROR 117-185: 有 1 个未闭合的“DO”块。
NOTE: 数值已转换为字符值,位置:(行:列)。
      2902:77   
NOTE: 从数据集 WORK.YMTOT. 读取了 1 个观测
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒
      
2                                                             SAS 系统                        2016年09月08日 星期四 下午03时29分54秒

33             put &ymcurr.;
33             put &ymcurr.;
               ___
               180
ERROR 180-322: 语句无效或未按正确顺序使用。

34            end;
              ___
              180
ERROR 180-322: 语句无效或未按正确顺序使用。

二维码

扫码加我 拉你入群

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

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

全部回复
2016-9-18 15:21:32
宏单独运行后在调用宏变量
二维码

扫码加我 拉你入群

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

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

2016-9-19 10:57:06
按照宏的执行顺序,进行简单的替换,就能看到问题了。宏大部分是在进行简单的语义替换,而不是一个自定义函数可以预编译。

data _null_;
   do i=1 to 2;
/*    %setymcurr(ns=1); 替换成宏内语句*/
data _null_;
set ymtot(firstobs=1 obs=1);
call symput('ymcurr',ymcurr);
run;

    put &ymcurr.;
   end;
run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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