【问题标题】:Error when using PUT in a Macro variable (loop) SAS在宏变量(循环)SAS 中使用 PUT 时出错
【发布时间】:2020-09-30 18:39:33
【问题描述】:

我需要一个大小为 2 且前导零的变量,例如 01、02、10、11...,以便在宏中使用。 宏 executa1 有效,但显示值 1,2,10,11 ....(没有零)。 所以我尝试使用z2。格式,如宏 execta2。

但不幸的是,它不起作用。

%LET vdia = 01;
%LET vano = 2019;

%MACRO executa1;
    %DO i=1 %TO 12 %BY 1;
        %LET vmes = &i;      
        %PUT &vmes;
    %END;
%MEND;

%MACRO executa2;
    %DO i=1 %TO 12 %BY 1;
        %LET vmes = %PUT(&i, z2.);
        %PUT &vmes;
    %END;
%MEND;

%executa1
%executa2

有错误的日志(executa2):

39              %LET vmes = %PUT(&i, z2.);
ERROR: Macro keyword PUT appears as text.
ERROR: A dummy macro will be compiled.

我也尝试了 %eval()%sysfunc() 的一些组合,但无济于事。

有人知道实现预期结果的任何技巧吗?

【问题讨论】:

  • %PUT 是一个宏语句。您不能为变量分配语句。您为变量分配一个值、一个可解析的表达式、宏解析或宏调用,它们可能会或可能不会将源代码作为 RHS 发出。

标签: sas sas-macro


【解决方案1】:

%put 在宏语言中仅将项目打印到日志中。相反,您想使用putn()

%LET vmes = %sysfunc(putn(&i, z2.));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多