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 がマクロ内のマクロ変数で失敗する理由を知っている人はいますか?
アルヴィン・シウ