错误180-322:声明无效或使用正确的

时间:2018-03-14 08:03:33

标签: sas

我已经搜索了一些有关此错误的信息,但似乎与我的不匹配,可能会有人熟悉此错误。

“由SAS宏生成的代码,或者在编辑器中通过”提交选定“操作提交的代码,可能会无意中留下分号。”通过这个评论在我的代码中探索仍然是深奥的。尽管我得到了这个错误,结果是对的。可能有人给出任何建议。谢谢!

%let cnt=500;
%let dataset=fund_sellList;
%let sclj='~/task_out_szfh/fundSale/';
%let wjm='sz_fundSale_';

%macro write_dx;
    options spool;
    data _null_;
    cur_date=put(today(),yymmdd10.);
    cur_date=compress(cur_date,'-');
    cnt=&cnt;
    retain i;
    set &dataset;
    if _n_=1 then i=cnt;
        if _n_<=i then do;
            abs_filename=&sclj.||&wjm.||cur_date||'.dat';
            abs_filename=compress(abs_filename,'');
            file anyname filevar=abs_filename encoding='utf8' nobom ls=32767 DLM='|';
                put cst_id @;
                put '@|' @;
                put cust_name @;
                put '@|' ;
        end;
    run;
%mend write_dx;

%write_dx();

如果我没有使用宏,则没有错误。

data _null_;
    options spool;
    cur_date=put(today(),yymmdd10.);
    cur_date=compress(cur_date,'-');
    cnt=&cnt;
    retain i;
    set &dataset;
    if _n_=1 then i=cnt;
        if _n_<=i then do;
            abs_filename=&sclj.||&wjm.||cur_date||'.dat';
            abs_filename=compress(abs_filename,'');
            file anyname filevar=abs_filename encoding='utf8' nobom ls=32767 DLM='|';
                put cst_id @;
                put '@|' @;
                put cust_name @;
                put '@|' ;
        end;
    run;

--------------------------------更新-------------- --------------------   我将%添加到关键字,但仍然得到相同的错误

%macro write_dx;
        options spool;
        data _null_;
        cur_date=put(today(),yymmdd10.);
        cur_date=compress(cur_date,'-');
        cnt=&cnt;
        retain i;
        set &dataset;
        %if _n_=1 %then i=cnt;
            %if _n_<=i %then %do;
                abs_filename=&sclj.||&wjm.||cur_date||'.dat';
                abs_filename=compress(abs_filename,'');
                file anyname filevar=abs_filename encoding='utf8' nobom ls=32767 DLM='|';
                    put cst_id @;
                    put '@|' @;
                    put cust_name @;
                    put '@|' ;
            %end;
        run;
    %mend write_dx;

    %write_dx();

2 个答案:

答案 0 :(得分:0)

更改

searchkick

%macro write_dx;

创建宏时,即使没有传递值,也必须包含%macro write_dx();

答案 1 :(得分:0)

当宏未设计为接受任何参数时,为什么要在宏调用中添加()?如果你这样做,那么宏观处理器不处理(),因此传递给SAS进行解释。如果您单独提交();,则会出现相同的错误消息。

1    %macro xx ;
2    data _null_;
3     put 'Running data step in macro';
4    run;
5    %mend xx;
6    %xx();

Running data step in macro
NOTE: DATA statement used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds


6    %xx();
        -
        180
ERROR 180-322: Statement is not valid or it is used out of proper order.

7    ****;
8    ();
     -
     180

ERROR 180-322: Statement is not valid or it is used out of proper order.

但是如果用0或更多参数定义它。

%macro param();
generated code
%mend ;

%put |%param()|;

宏处理器将使用(),因此它们不会传递给SAS使用。

|generated code|