我正在使用带有 SAS 9.1.3 的 AIX 6.1
我有一个在 PC SAS 9.1 中运行的
程序 该程序将重新提交给 unix。
现在,我将程序转换为完全在 AIX 6.1 中运行
该程序非常奇怪地失败了。
经查,是由于 %sysrput 造成的,
下面是简化版的程序:
options mPrint mLogic symbolGen ;
%macro combine( startdate= , fullprefix= );
data _null_ ;
call symput( 'plength',compress(length(compress("&fullprefix."))));
run;
data _null_ ;
length balance 8. ;
balance= 1 + &plength.;
run;
%mEnd;
data _null_ ;
call symput( 'refdate', put(today(),date9.));
run;
%put &refdate.;
* -- If I forget to comment out the sysrput, the plength cannot be resolved -- ;
%sysrput refdate=&refdate.;
%put &refdate.;
%combine( startdate= "&refdate."d, fullprefix=a_filename_prefix );
(对不起,措辞没有意义,我只是想做一个演示。)
实际上,在 AIX 中,我不应该使用 %sysrput
我只是忘记将其注释掉。
但是,如果我忘记了这一点,那么 balance= 语句中的 plength 宏变量就会出错。这很奇怪。
要解决,只需将 %sysrput 注释掉即可。
但是,有谁知道为什么 %sysrput 会导致宏中的宏变量失败?
阿尔文·萧