あなたは実際にここに正しい方法を渡しているわけではありません。あなたは問題を引き起こしている2つの異なるものを混在させています。
マクロ変数でこれらの関数の結果を解決することも、関数呼び出しを保存して関数をデータステップに入力したように扱うこともできます。したがって、CATSなどを使用して結合します。
これはそのままですが、これらの機能の結果ではなく、"\\path\to\COMPRESS(INTNX(MONTH..."
のようなファイル名になってしまうため、問題になります。
ので、一つの選択:
DATAFILE= cats("...Files_Submitted\",&yrmm.,"\Reconcile\",&quarter.,"Principal balances.xls";
あなたが期待するような機能は、それらの値を提供させます。
もう1つの方法は、%SYSFUNC
を使用して、マクロ変数で解決される値を求めることです。これはより一般的な方法ですが、確かにどちらも実際にはすべての目的にとって特に優れています。
%LET EOLM= %sysfunc(INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.));
他の2つについても同様です。 %SYSFUNC
呼び出しでは引用符は使用されないため、MONTHの引用符を削除しています(文字列区切り文字ではなく引用符文字を使用しない場合)。
%LET yrmm= %sysfunc(year(&EOLM.))%sysfunc(month(&EOLM.),z2.);
ここでは、フォーマットを直接SYSFUNC呼び出しに入れます。また、マクロ変数(通常はテキストを生成する)に連結文字を使用せず、通常はCOMPRESS(必ずしもそうではありません)を使用する必要はありません。ここで
%LET qtr = %sysfunc(year(&EOLM.))Q%sysfunc(CEIL(%sysevalf(%sysfunc(month(&EOLM.))/3)));
我々は(通常は、マクロ構文で非整数数学を持つことはできません)計算を行うために%SYSEVALF
を使用しています。私たちはQから引用符を取り除き、それを一列に並べます。
はすべて一緒にそれを置く:もっと簡単もちろん
%let monthsAgo = 3;
%LET EOLM= %sysfunc(INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.));
%put &=EOLM;
EOLM=20789
%LET yrmm= %sysfunc(year(&EOLM.))%sysfunc(month(&EOLM.),z2.);
%put &=yrmm;
YRMM=201612
%LET qtr = %sysfunc(year(&EOLM.))Q%sysfunc(CEIL(%sysevalf(%sysfunc(month(&EOLM.))/3)));
%put &=qtr;
QTR=2016Q4
がyrmm/QTRのためのフォーマットを使用することであったかもしれません...&EOLM
から%SYSFUNC
を削除し、%SYSFUNC
フォーマットオプションは、フォーマットを処理せ
%let yrmm = %sysfunc(putn(&eolm.,yymmn6.));
%let qtr = %sysfunc(putn(&eolm.,yyq6.));
%put &=yrmm &=qtr;
たり(これは少しかわいい取得される可能性があります)。番号を保存しないここEOLM
ますが、あなたが画面に表示されるテキストを格納し、YRMM
またはQTR
が定義されるまで数は解決されません。
%LET EOLM= INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.);
%let yrmm = %sysfunc(&eolm.,yymmn6.);
%let qtr = %sysfunc(&eolm.,yyq6.);
%put &=yrmm &=qtr;
'CATS(...)'ソリューションを動作させることはできませんでしたが、%sysfuncは魅力的に機能します。あなたの迅速かつ詳細な応答をありがとう! –