【问题标题】:Error in simple SAS macro简单 SAS 宏中的错误
【发布时间】:2016-10-06 06:38:26
【问题描述】:

我正在测试宏循环。代码很简单,但总是出现错误消息“宏函数 %SCAN 有太多参数”。无法理解原因。任何人都可以解释一下吗?谢谢! 代码是:

%macro test;
 proc sql;select distinct tj, max(tj) into: tp separated by ",", : maxtp from ASA_k where tj>0;quit;    

 %do i=1 %to &maxtp.;
  %let timep=%scan(&tp.,&i.,",");
  %put &timep.;
 %end;

%mend;

%test;

【问题讨论】:

    标签: macros sas


    【解决方案1】:

    在宏变量中,您存储用逗号分隔的值,这些逗号是有问题的。在解析宏变量后,您需要使用%bquote 宏函数屏蔽它们。 %scan 函数中的第三个参数也不正确,因为您的分隔符是 ,"。您必须使用 %str 宏函数来屏蔽逗号。就这样:

    %macro test;
     proc sql;
         select distinct tj, max(tj) 
         into :tp separated by ",", :maxtp 
         from ASA_k 
         where tj>0;
     quit;    
    
     %do i=1 %to &maxtp.;
      %let timep=%scan(%bquote(&tp.),&i.,%str(,));
      %put &timep.;
     %end;
    %mend;
    
    %test;
    

    【讨论】:

    • 或者只是用另一个字符分隔
    • 感谢罗伯特的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多