【问题标题】:sas macro variable not resolvedsas 宏变量未解析
【发布时间】:2016-10-10 16:15:58
【问题描述】:

我对曾经有效的代码有疑问(比如一周前) 现在在一台新电脑上,它不再是了

我用 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

这段代码以前可以正常解析,不明白为什么现在不行了。

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

【问题讨论】:

    标签: macros sas global-variables


    【解决方案1】:

    语法问题可能会使解析器混淆,您需要运行魔术字符串(如乔的explained)来重置:

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

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

    【讨论】:

    • 谢谢!如果我再次遇到这种情况,这肯定会有所帮助。至于失踪;当我粘贴代码时它消失了(覆盖)。它在代码中,我没有警告
    • 已更新我的答案以省略有关; 的部分。快乐编码:-)
    【解决方案2】:

    我重新启动了 SAS,现在相同的代码可以工作了。

    我仍然不知道为什么它以前不起作用,或者即使这对某些人来说是一个反复出现的问题,但显然 SAS 的座右铭是“当有疑问时重新启动!”

    【讨论】:

    • 有时你会得到一个未封闭的引用、宏定义或其他掩盖宏功能的东西。重启是最简单的解决方法。
    • 谢谢。将来会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多