我已经搜索了一些有关此错误的信息,但似乎与我的不匹配,可能会有人熟悉此错误。
“由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();
答案 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|