错误:在Macro:SAS中找不到所需的运算符

时间:2015-07-14 21:31:55

标签: macros sas

我正在研究这个宏(见下文)并且这个陈述没有解决:%if(& var_len>&& max& i)%然后%let max& i =& var_len;并且返回的错误是:错误:在表达式中找不到所需的运算符:(& var_len>&& max& i) 错误:宏PRCS_FREQ将停止执行

有没有人知道如何改进这个宏并让这句话得到解决?

宏:

%macro prcs_freq;
%do i=1 %to &n_of_var;
%global end&i f_line_count&i f_var&i;

%let max&i=1;
%let k=%eval(&i+1);
%if (&i < &n_of_var) %then %let end&i=%eval(&&cum&k-1);
%else %let end&i=&n_of_line;

%let f=%eval(&&cum&i+1);  /* line number for "Frequency" */
%let freq_pos&i=%index(%bquote(&&line&f),Frequency);  /* column position  of "Frequency" */
%let f_var&i=%upcase(%scan(%bquote(&&line&f),1,%str( )));
%let var_len=%length(&&f_var&i);
%let max&i=&var_len;

%global &&f_var&i;
%let &&f_var&i=&i; /* for Frequency */

%do j=&f+2 %to &&end&i;
  %let var_len=%length(%substr(%bquote(&&line&j),1,&&freq_pos&i-1));
  %if (&var_len > &&max&i) %then %let max&i=&var_len;
  %put *** f=&f  i=&i  j=&j  var_len=&var_len  freq_pos&i=&&freq_pos&i    
max&i=&&max&i  f_var&i=&&f_var&i;
%end; /* %do j= */
%let f_line_count&i=%eval(&&end&i-&&cum&i+1);
 %end; /* %do i= */

data _null_;
%do i=1 %to &n_of_var;
  file "&wk_dir/&&f_var&i...txt";
  %do j=&&cum&i %to &&end&i;
    put "%substr(%bquote(&&line&j),1,&&max&i+5)%substr(%bquote  (&&line&j),&&freq_pos&i)";
  %end;
%end;
run;



 /* test */
 %put =====;
 %put ===== Frequency;
 %put =====;
 %do i=1 %to &n_of_var;
 %put f_var&i=&&f_var&i   cum&i=&&cum&i   end&i=&&end&i          f_line_count&i=&&f_line_count&i   &&f_var&i=&&&&&&f_var&i;
%end;
%mend prcs_freq;

1 个答案:

答案 0 :(得分:0)

在宏代码中进行复杂计算令人沮丧且难以调试。由于您的宏已经生成了数据步骤,我建议您只需用数据步骤代码替换大量的宏计算。您可以使用CALL SYMPUTX()生成宏的后续步骤所需的任何新宏变量。