2016-05-02 8 views
0

申し訳ありませんが、おそらく非常に単純な質問ですが、私はそれに答えを見つけることができないようです。SAS intnx quarter variation

と言うが、我々は4分の4バック前月から含まれているテーブルを作成したい:

%macro asd; 

%let today = %sysfunc(today()); 

%let quarter_count_back = 4; 

%let first_quarter = %sysfunc(intnx(month,&today.,-1)); 

proc sql; 
create table quarters 
(
Quarters num informat = date9. format = date9. 
); 
insert into quarters 

%do i = 0 %to -&quarter_count_back.+1 %by -1; 

values(%sysfunc(intnx(quarter,&first_quarter.,&i.))) 

%end; 
; 
quit; 


run; 
%mend asd; 
%asd; 
run; 

このコードはうまく動作し、APR2016から始まり、四半期での時間に戻ってテーブルを作成します。しかし、 'first_quarter'行の数字を-2、-3などに変更すると、コードは常にJAN2016から始まりますが、それはちょうど私には意味がありません!例えば:それは私のコードでこの行を入れた場合、テーブルはMAR2016から開始し、四半期で戻るべきことを論理的ようだが、そうでない

%let first_quarter = %sysfunc(intnx(month,&today.,-2)); 

、それはJAN2016から始まります。

私がここで間違っていることに関するアイデアはありますか?

ありがとうございます!

+0

第4引数はINTNXとデフォルトの動作についてです。あなたは '' s ''か同じものが欲しい。 – Reeza

答えて

0

INTNX関数のデフォルトの配置は、間隔の始まりです。あなたが3ヶ月前に戻ることを望むなら、それは四半期とは異なります。アラインメントを制御するINTNX関数の4番目のパラメータを調べることで、これらを調整できます。オプションは次のとおりです。あなたが3ヶ月をしたい場合は

  • 同じ
  • エンド

を始めて、代わり四半期のMONTH.3間隔を試してみてください。

http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p10v3sa3i4kfxfn1sovhi5xzxh8n.htm

+0

ありがとう!しかし、「同じ」整列だけが働いた。私は確信していませんが、なぜ '終わり'の位置合わせがうまくいかないのですか?それはそれによってループバックする論理的だ... BTWは3ヶ月と同じ四半期ではない? – Kvadich

+0

私が理解するところでは、四半期は特定の間隔 - Jan- Marですが、3ヶ月は任意の3ヶ月、例えば2月から4月までです。 – Reeza