特定のプログラムが実行されなかったことをユーザに警告する文をSAS Logに出力しようとしています。これを行うには、私は、Putステートメントを使用してSASログに印刷しています:putステートメント内で関数を使用するにはどうすればよいですか? SAS
%let step1 = My program;
%let rec= cats(&step1.);
data _null_;
put "** &rec. did not run";
run;
Putステートメントの版画:「**猫(私のプログラム)が実行されませんでした」。誰もが猫の機能が実行されていない理由を知っていますか? SASのステートメントの前に実行されているマクロコードと関係があると思いますが、どうやってこの作業を行うのか分かりません。
EDIT
おかげReezaとトム。今私はなぜこれが動作していないのか理解しています - 私は%sysfuncを使ってデータステップの外で関数を使う必要があり、put文の中で関数を使うことはできません。
トム - あなたはより完全な例を求めて:
は、私は、ユーザーが簡単に実行し、スキップされたどのプログラムを参照できるように、SASログに声明を印刷しようとしています。私は、次のやっていることを達成しようとしています:私は、このコードは動作しますが、機能Putステートメントの内側に実行させるための方法を見つけ出すことができれば、私は思っ
data _null_;
array steps(*) $ step1-step7;
do i=1 to dim(steps);
if symget(cats('run',i)) = 'N' then
put "** The program "symget(cats('run',i)" did not run";
end;
run;
。しかし、それは不可能です。私は変数を "i"で変更できるようにする必要があります。
たとえば、iが1の場合、put文は "program1.sasが実行されませんでした"である必要があります。
iが2の場合、putステートメントは「プログラムfile2.sasは実行されませんでした」などとなります。
私が使用してみました:
put "** The program &&step&i did not run";
が、SASは私の変数を認識することができません。
これはもう少し文脈を提供してくれることを願っています。
なぜあなたはそのステップを持っていますか? – Reeza
'PUT'文の途中に関数を含めることはできません。あなたの 'PUT'ステートメントは文字リテラルを置いているだけなので、関数を呼び出そうとしていません。あなたが '%sysfunc()'マクロ関数を使わなかったので、2番目の '%LET'文は' cats() '関数を呼び出そうとしていません。あなたは何をしようとしているのより意味のある例がありますか? – Tom
あなたのDOループ上のupperboundを設定する以外に、ARRAYの手順は何ですか? – Tom