2016-09-22 79 views
0

私は2つの異なる日付201509と201608を持っています。それらの間のすべての日付をyyyymmのような形式(201509,201510,201511,201512,201601,201602,201603,201604,201605,201606,201607,201608)で取得したいと思います。 。この問題は数ヶ月間の数ヶ月に取り組んでいます。また、月は変わらず、201601〜201612にすぎないかもしれません。毎日の実行コードなので、SASで自動化しようとしています。どんな助けにも感謝!SASのyyyymm形式の2つの日付間のすべてのyyyymm日付を取得するにはどうすればよいですか?

+0

これらは実際の日付変数か文字変数ですか? – Joe

+0

日付形式の数値変数 –

答えて

2

SASには、これを簡単に実行できる機能がありますが、まずあなたの日付を「SAS日付」として変換/読み込む必要があります。次に、INTCKを使用して開始日と終了日の間の月数をカウントし、INTNXを使用して新しい月日日値を作成することができます。

data months; 
    input (start end)(:yymmn.); 
    format start end yymm.; 
    do i = 0 to intck('month',start,end); 
     month = intnx('month',start,i); 
     output; 
     end; 
    format month yymm.; 
    cards; 
201509 201608 
;;;; 
    run; 
proc print; 
    run; 
0

彼らは日付フォーマットであれば、すでに、あなたは毎日のロジックを把握することはできません場合は、あなたが作成できる間隔に一日を追加し、それが

where date between '01Jan2016'd and '31Dec2016'd; 

のような単純なことができあなたのためにそれを行うマクロ変数。

%let start=201601; 
%let end=201612; 
%let start_date = %sysfunc(inputn(&start, yymmn6.), date9.); 
%let end_date = %sysfunc(intnx(month, %sysfunc(inputn(&end, yymmn6.)), 0, end), date9.); 
%put &start_date.; 
%put &end_date; 
関連する問題