2016-12-06 24 views
0

マクロ変数から日付を減算する際に問題があります。マクロ変数から日付を引く

現在、私は実行してマクロ変数を作成します。

%LET date = %SYSFUNC(TODAY(),MMDDYY10.); 

私は次のようにして&日から1日を減算することができるはずのように私は感じる:

%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.); 

しかし、

エラー:関数名が見つかりません。 %SYSFUNCまたは%QSYSFUNCマクロ関数参照。

私はdate9であることをNEWDATE&のための出力を必要としています。

ありがとうございます、ありがとうございます!

答えて

2

クイック答え:

%LET date = %SYSFUNC(TODAY()); 
%LET newDate = %SYSFUNC(INTNX(day,&date,-1),date9.); 
%put &=newdate; 

説明:まず

、それが日付として正しく解釈されていることを確認するために&dateから書式設定を削除するのがベスト。元のコードはintnx()〜12/06/2016に解決され、その後12で割り算され、6を2016で割ったものに等しくなりました。

第2に、%sysfunc()の内部関数はdatastep関数でなければなりません。 %sysfunc()の全体のポイントはこれらの機能をsasに持っていくことです。 %intnx()はマクロ関数ではありませんが、もしあれば、定義によって、%sysfunc()にラップする必要はありません。

最後に、 'day'パラメータを引用符で囲むべきではありません.SASマクロのすべてがデフォルトでテキストとして扱われます。

+0

私は答えとしてこれを受け入れるだろう。私はデータ処理に必要なものすべてを押し込んで、望ましい出力を得ました。短いストーリー、すべてを1行でやろうとしないで、データステップを使用してください。 –

+0

@ JoshuaSchlichting私はマクロの言葉でこれをやっていない理由は全く見当たりませんが、あなたはそれを正しく理解していませんでした。しかし、マクロ言語を理解できなければ、それをデータのステップに入れるのが良い理由です。確かに! – Joe

0

@RawFocusは、元の日付(今日の日付)をフォーマットする必要はなく、そのように対処する方が簡単です。誰かがMMDDYY10.フォーマットを適用したい場合

ただ、完全を期すために、これはそれを行うことができる方法である:

%LET date = %SYSFUNC(TODAY(),mmddyy10.); 
%LET newDate = %SYSFUNC(INTNX(day,%SYSFUNC(INPUTN(&date,mmddyy10)),-1),date9.); 
%put &=date &=newdate; 
関連する問題