2017-03-22 8 views
0

SASでは、毎日のタブーでデータをブラウズしているので、動的なファイル名にするのが好きです。ファイル名にマクロを含める

私はこのようなファイル名でマクロを含めることを試みた:

%let date=input(put(today()-3,ddmmyy6.),6.); *This is equal to todays date-3 (format = 190317) 
filename nlp "DailyB.DG%date"; 

それは動作しません。あなたは私を助けることができますか?私は一日の後にコードを実行する場合DDMMYYので(190317) :

は、私は私がこの形式で日付マイナス今日から3日間を持ちたい 以下の例を掲載している行うには好きなものの直感を取得するにはそれはそう、私は次の取得200317.

変数は、コードの中に配置する必要があり、次のようになります。

filename nlp 'DailyB.DG190317'; 

答えて

1

に変更する必要があります。これを行う方法が1つあります。

%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.)); *This is equal to todays date-3 (format = 190317); 
%put &=date; 

最初%sysfunctoday()の結果を要求し、第二には、フォーマットする結果を求めます。コメント内で@Quentinが指摘するように、%evalが値から3を引くために必要です。

データステップがさらに快適な場合は、call symputxがここで動作します。あなたが現在試さだから何

data _null_; 
    call symputx('date',put(today()-3,ddmmyyn6.)); 
run; 
%put &=date; 
0

あなたは%のsysfuncを(使用する必要があります)と%のeval()マクロ関数は、評価しますデータステップはデータステップ外で機能します。ジョーが言うように:

%let date=%sysfunc(putn(%eval(%sysfunc(today())-3),ddmmyyn6.)); 

は、その後、あなたが%sysfuncを必要とする、あなたはマクロ変数が関数を解決したい場合は、あなたの%&

filename nlp "DailyB.DG&date"; 
+1

私はそれが十分だとは思わない。 %sysfuncが必要です。おそらく%sysfunc(today() - 3、ddmmyy6)。それがうまくいくか、%eval(today() - 3)が必要か分かりません。 – Quentin

+0

あなたは正しい、私はそれを逃した。 – DomPazz

+1

'%eval()'は必要ありません。 PUTN()のようなSAS関数は引数として式を取ることができます。 – Tom

0

%SYSFUNC()を使用するために必要なマクロコードで関数を実行するには

filename nlp "DailyB.DGinput(put(today()-3,ddmmyy6.),6.)"; 

のようなファイル名の文で終わるために起こっています。また、PUT()関数が%SYSFUNC()で機能しないため、PUTN()関数を使用する必要があります。

%let date=%sysfunc(putn(%sysfunc(today())-3,ddmmyyn6)); 
filename nlp "DailyB.DG&date"; 

プロセスが変更される場合は、世紀を含めることができるように、名前の日付部分に8文字を使用することをお勧めします。また、あなたの日付文字列の年、月、日の順序を使用する場合、生成されたファイル名は適切な日付順にソートされ、ユーザーはデューイ10進法の日のためにコロンバスの日を混乱させることもありません。

関連する問題