特定の曜日を取得するためにsasマクロプロセスでマクロ変数を作成する方法を知っている人はいますか?
sasマクロを実行するたびに、前週の水曜日の日付を取得したいと思います。
例えば :
今日:2011年10月18日火曜日->今日マクロを実行すると、次のようになります:「2011年10月12日水曜日」
月曜日にマクロを実行した場合でも、「2011年10月12日水曜日」を取得したい
ありがとう、
これは。で実現できますintnx
。次に例を示します(マクロではありませんが、アイデアが得られます)。
まず、いくつかのデータを生成します。
data dates;
do d=0 to 13;
date = '15oct2011'd + d;
output;
end;
format date date8.;
run;
これにより、最新の水曜日が表示されます。'week.4'は、水曜日から始まる週の指示であることに注意してください。
data dates;
set dates;
wed=intnx('week.4',date,0,'beginning');
format wed date8.;
run;
変数wed
には、最新の水曜日の日付が含まれるようになりました。
マクロを呼び出して最新の水曜日の日付を返す場合。(また、日付をマクロ変数に格納するだけの場合は、「&weekday;」ステートメントを削除してください。)
%Macro Get_Weekday(date);
%Let weekday=%sysfunc(putn(
%sysfunc(intnx(week.4,&date,0,beginning)),weekdate.));
&weekday;
%Mend Get_Weekday;
%Put Today is %sysfunc(putn(%sysfunc(today()),weekdate.))
and the most recent Wednesday is %Get_Weekday(%sysfunc(today()));
%Put If Today was %sysfunc(putn(%eval(%sysfunc(today())-1),weekdate.))
then the most recent Wednesday would be
%Get_Weekday(%eval(%sysfunc(today())-1));
私はあなたの質問を「SASに現在の曜日に関係なく先週の水曜日の日付を返すようにするにはどうすればよいですか?」と解釈しました。
それが望ましい結果である場合は、2つのintnx
呼び出しが必要です。1つは先週の日曜日に戻るための呼び出し(lastwk=intnx('week', today, -1);
)、もう1つは先週の水曜日に進むための呼び出し(lastwed=intnx('week.4', lastwk , 1);
)です。
より簡単な方法は、先週の初めに戻って結果に3を追加することですが、そのコードは意図的なオフセットというよりはハックのように見えます。
data _null_;
do i = -10 to 10;
today="&SYSDATE9"d + i;
lastwk=intnx('week', today, -1);
lastwed=intnx('week.4', lastwk , 1);
put today weekdate. '-->' lastwed weekdate.-l;
end;
run;
Sunday, October 9, 2011-->Wednesday, October 5, 2011
Monday, October 10, 2011-->Wednesday, October 5, 2011
Tuesday, October 11, 2011-->Wednesday, October 5, 2011
Wednesday, October 12, 2011-->Wednesday, October 5, 2011
Thursday, October 13, 2011-->Wednesday, October 5, 2011
Friday, October 14, 2011-->Wednesday, October 5, 2011
Saturday, October 15, 2011-->Wednesday, October 5, 2011
Sunday, October 16, 2011-->Wednesday, October 12, 2011
Monday, October 17, 2011-->Wednesday, October 12, 2011
Tuesday, October 18, 2011-->Wednesday, October 12, 2011
Wednesday, October 19, 2011-->Wednesday, October 12, 2011
Thursday, October 20, 2011-->Wednesday, October 12, 2011
Friday, October 21, 2011-->Wednesday, October 12, 2011
Saturday, October 22, 2011-->Wednesday, October 12, 2011
Sunday, October 23, 2011-->Wednesday, October 19, 2011
Monday, October 24, 2011-->Wednesday, October 19, 2011
Tuesday, October 25, 2011-->Wednesday, October 19, 2011
Wednesday, October 26, 2011-->Wednesday, October 19, 2011
Thursday, October 27, 2011-->Wednesday, October 19, 2011
Friday, October 28, 2011-->Wednesday, October 19, 2011
Saturday, October 29, 2011-->Wednesday, October 19, 2011