在宏变量(循环)SAS 中使用 PUT 时出错
Error when using PUT in a Macro variable (loop) SAS
我需要一个大小为 2 且前导零的变量,例如 01、02、10、11...,以便在宏中使用。
宏 executa1 有效,但显示值 1,2,10,11 ....(没有零)。
所以我尝试使用 z2。格式,如宏 executa2.
但不幸的是,它不起作用。
%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
仅将项目打印到日志中。相反,您想使用 putn()
.
%LET vmes = %sysfunc(putn(&i, z2.));
我需要一个大小为 2 且前导零的变量,例如 01、02、10、11...,以便在宏中使用。 宏 executa1 有效,但显示值 1,2,10,11 ....(没有零)。 所以我尝试使用 z2。格式,如宏 executa2.
但不幸的是,它不起作用。
%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
仅将项目打印到日志中。相反,您想使用 putn()
.
%LET vmes = %sysfunc(putn(&i, z2.));