2016-10-10 78 views
0

我有过去可以正常工作(如一周前) 和代码中的问题,现在一个新的计算机上,它不anyomoreSAS宏变量没有解决

创建我的宏观变量与SQL

proc sql noprint;  
select count(distinct(num_nation)) into :nb_country from AFGp 
; 
%let nb_country = &nb_country; 
select distinct(num_nation) into :pays1 - :pays&nb_country from AFGp; 
select count(*) into :nbvar from variables; 

%let nbvar=&nbvar; 

select variable, var_label, lbl_categ into :var1 - :var&nbvar, :lab1 - :lab&nbvar, :labc1 - :labc&nbvar from variables 
; 
quit; 
run; 

和该宏不承认宏观变量开始使用var:

%macro testtest(); 

%do j = 1 %to %eval(&nb_country); 

    %do i = 2 %to %eval(&nbvar); 
     proc freq data=AFGp noprint; 
      tables &&var&i./nocol nocum nofreq nowarn out=_TFP_&j._&i; 
      where num_nation = &j; 
     run; 
     %end; 
    %end; 

%mend; 

例如: 这个

%let j=4; 
%put &j &var4 &&var&j; 

返回此:

4 Female &&var4 

此代码用于正常解决,我不明白为什么它不anyomore。

如果你能帮助我,甚至把我放在正确的方向,这已经阻止了我3小时,现在

回答

1

语法问题可以得到解析器混出来的,你需要运行魔术字符串(如explained由Joe)复位:

%*;*;*';*";%*%mend;*); 

这可能不是你的代码的问题 - 它可以是触发(例如在Base SAS中),方法是突出显示并运行“部分”代码块。

+0

谢谢!如果我再次交谈,这肯定会有所帮助。至于失踪者;当我粘贴代码(覆盖)时,它消失了。它在代码中,我没有警告 –

+1

已经更新了我的答案,省略了关于';'的部分。快乐编码:-) –

0

我重新启动SAS,现在同样的代码工作。

我仍然不知道为什么它没有工作之前,或者即使这是一个难以解决的问题,但显然SAS的座右铭是“当有疑问重启!

+1

有时你会得到一个未封闭的引用,宏定义或其他掩盖宏设施的东西。重新启动是解决它的最简单方法。 – DomPazz

+0

谢谢。这将有助于未来! –