前のページ|次のページ

INTCK関数

2つの日付、時間または日時の値の間にある指定した種類の間隔の境界数を返します。

カテゴリ: 日付と時間

構文

必須引数

interval

間隔名が含まれる文字定数、変数または式を指定します。Intervalは、大文字または小文字で表示できます。intervalに使用可能な値のリストについては、Intervals Used with Date and Time Functions (SAS言語リファレンス: 解説編)を参照してください。

間隔の種類(日付、日時または時間)は、start-dateの値の種類と一致する必要があります。
より複雑な間隔を指定するには、基本間隔名に乗数とシフトインデックスを組み合わせて使用できます。間隔名の一般的な形式を次に示します。

interval<multiple.shift-index>

間隔名の3つの部分は次のとおりです。

interval

基本間隔の種類の名前を指定します。たとえば、YEARで年間隔を指定します。

multiple

乗数を指定します(省略可能)。基本タイプの間隔の期間に対する倍数と同等の間隔を設定します。たとえば、間隔YEAR2は2年の期間の間隔、つまり隔年です。

参照項目 乗数とシフト間隔を使用した日時の増分

custom-interval

SASデータセットによって定義されるユーザー定義間隔を指定します。各オブザベーションには、2つの変数beginendが含まれます。

要件 custom-interval変数を使用する場合は、INTERVALDSシステムオプションを使用する必要があります。
参照項目 詳細

shift-index

シフトインデックスを指定します(省略可能)。間隔の開始時点を指定したサブ期間にシフトします。たとえば、YEAR.3で、各カレンダ年の3月1日に開始して翌年の2月末に終了するようにシフトされた年間隔を指定します。

制限事項 シフトインデックスは、間隔全体のサブ期間の数以下にする必要があります。たとえば、2年間隔では25番目の月は存在しないため、YEAR2.24は使用できますがYEAR2.25はエラーになります。
デフォルトのシフト期間が間隔の種類と同じ場合、複数期間の間隔のみを任意のシフトインデックスでシフトできます。たとえば、MONTHの種類の間隔はデフォルトではMONTHのサブ期間でシフトします。そのため、シフトインデックスで月間隔はシフトできません。ただし、各MONTH2間隔には2つのMONTH間隔が含まれるため、シフトインデックスで2か月間隔をシフトできます。たとえば、間隔名MONTH2.2では、偶数月の1日目に開始する2か月の期間が指定されます。
参照項目 乗数とシフト間隔を使用した日時の増分

start-date

開始SAS日付、時間または日時の値を表すSAS式を指定します。

end-date

終了SAS日付、時間または日時の値を表すSAS式を指定します。

オプション引数

'method'

DISCRETEメソッドとCONTINUOUSメソッドのどちらを使用して間隔を数えるかを指定します。

methodは引用符で囲む必要があります。Methodには次のいずれかの値を指定できます。

CONTINUOUS

連続した期間を測定単位に指定します。間隔は開始日に基づいてシフトされます。

CONTINUOUSメソッドは記念日の計算に役立ちます。たとえば、次のプログラムを実行することで結婚年数を計算できます。
data b;
   WeddingDay='14feb2000'd;
   Today=today();
   YearsMarried=intck('YEAR', WeddingDay, today(), 'C');
   format WeddingDay Today date9.;
run;

proc print data=b;
run;
この結果は、WeddingDay=14FEB2000、Today=01OCT2012、YearsMarried=12です。
CONTINUOUSメソッドの場合、2000年1月15日から2000年2月15日までの月単位の間隔は1か月です。
別名 CまたはCONT

DISCRETE

連続しない期間を測定の単位に指定します。DISCRETEメソッドは、間隔の境界(月末など)を数えます。

デフォルトのDISCRETEメソッドは、時系列オブザベーションをビンに分類して処理する場合に役立ちます。たとえば、日単位のデータを月単位の時系列として処理するために月単位のデータに累積できます。
DISCRETEメソッドの場合、2000年1月31日から2000年2月1日までの間隔を月単位で示すと、1か月になります。
別名 DまたはDISC
デフォルト DISCRETE

詳細

カレンダの間隔の計算

個々の時間間隔内に含まれる値は、すべて同等とみなします。つまり、月間隔を指定した場合、2013年1月1日と2013年1月15日は同等です。これら両方の日付は、2013年1月1日に開始して2013年1月31日に終了する間隔を表します。この間隔を示すには、間隔の開始日(2013年1月1日)または間隔の終了日(2013年1月31日)を使用できます。これらの日付によって、月間隔内のすべての日付が表されます。
次の例では、start-date ('14JAN2013'd)は、2013年の第1四半期に相当します。
intck('qtr', '14JAN2013'd, '02SEP2013'd);
end-date ('02SEP2013'd)は、2013年の第3四半期に相当します。間隔数(start-dateend-dateの間に間隔の開始点が含まれる回数)は2です。
デフォルトのDISCRETEメソッドを使用するINTCK関数は、1番目の日付と2番目の日付の間に次の間隔の開始点が含まれる回数を数えます。2つの日付間に含まれる間隔数は計算しません。
  • 関数INTCK('MONTH', '1jan2013'd, '31jan2013'd)では、2つの日付が同月内に存在するため、0を返します。
  • 関数INTCK('MONTH', '31jan2013'd, '1feb2013’d)では、2つの日付が1か月離れた別の月に存在するため、1を返します。
  • 関数INTCK('MONTH', '1feb2013'd, '31jan2013'd)では、1番目の日付が2番目の日付よりも1つ後の別の間隔内に存在するため、-1を返します。(1番目の日付が2番目の日付よりも後で、2つの日付が同じ間隔内に存在しない場合、INTCKは常に負の値を返します)。
DISCRETEメソッドを使用する場合、WEEK間隔はstart-dateend-dateの間に7日間がいくつ含まれるかではなく、2つの日付間に存在する日曜日(週のデフォルトの開始曜日)の数で決定されます。start-dateend-dateの間に7日間が含まれる数を数えるには、CONTINUOUSメソッドを使用します。
multiple引数とshift-index引数は両方とも任意で、デフォルトで1になっています。たとえば、YEAR、YEAR1、YEAR.1、YEAR1.1は、すべて通常のカレンダ年を指定します。
日付間隔と時間間隔の操作の詳細については、日付間隔と時間間隔を参照してください。

日付間隔と日時間隔

SAS日時値で使用する必要のある間隔は、SAS日時間隔です。日時間隔を形成するには、日付間隔に接頭辞"DT"を付加します。たとえば、MONTHはSAS日付間隔で、DTMONTHはSAS日時間隔です。同様に、YEARはSAS日付間隔で、DTYEARはSAS日時間隔です。
間隔関数で確実に正しい結果を得るためには、日付値での日付間隔と日時値での日時間隔を使用します。日時間隔で日付値を使用する場合、SASはエラーメッセージを返しませんが、結果は正しくありません。
次の例では、DTDAY日時間隔を使用して2011年8月1日から2012年2月1日の間の日数を返します。
data _null_;
   days=intck('dtday', '01aug2011:00:10:48'dt, '01feb2012:00:10:48'dt);
   put days=;
run;
次の出力がログに書き込まれます。
days=184

カスタム時間間隔

カスタム時間間隔はSASデータセットで定義します。データセットにはbegin変数を含める必要があり、end変数とseason変数を含めることもできます。各オブザベーションは、間隔の開始点が含まれるbegin変数、および存在する場合は間隔の終了点を含むend変数で1つの間隔を表します。間隔は昇順で記述する必要があります。間隔には、間にギャップがあったり、重なり合ったりはできません。
SASシステムオプションINTERVALDS=は、カスタム間隔を定義して間隔データセットを新しい間隔名に関連付けるために使用します。INTERVALDS=システムオプションを指定する方法の例を次に示します。
options intervalds=(interval=libref.dataset-name);
引数
interval
間隔名を指定します。intervalの値は、libref.dataset-nameで命名されたデータセットです。
libref.dataset-name
ユーザーが指定した祝日を含むファイルのライブラリ参照名とデータセット名を指定します。
詳細については、カスタム時間間隔を参照してください。

販売カレンダの間隔

小売業界では、1年のカレンダを13週間からなる4つの期間に分けてデータを計算することがよくあります。期間の形式は、4-4-5、4-5-4または5-4-4のいずれかに基づきます。1番目、2番目、3番目の数値には、それぞれ各期間の1か月目、2か月目、3か月目の週数を指定します。詳細については、Retail Calendar Intervals: ISO 8601 Compliant (SAS言語リファレンス: 解説編)を参照してください。

例1: INTCKを使用した間隔の例

SASステートメントとその結果を次に示します。
SASステートメント
結果
qtr=intck('qtr', '10jan2013'd,
     '01jul2013'd);
put qtr;
 
2
year=intck('year', '31dec2012'd,
     '01jan2013'd);
put year;
 
1
year=intck('year', '01jan2013'd,
     '31dec2013'd);
put year;
 
0
semi=intck('semiyear', '01jan2010'd,
     '01jan2013'd);
put semi;
 
6
weekvar=intck('week2.2', '07jan2013'd,
     '01apr2013'd);
put weekvar;
 
7
wdvar=intck('weekday7w', '01jan2013'd,
     '01feb2013'd);
put wdvar;
 
27
y='year';
date1='01sep2003'd;
date2='01sep2013'd;
newyears=intck(y, date1, date2);
put newyears;
10
y=trim('year     ');
date1='1sep2005'd + 300;
date2='1sep2013'd - 300;
newyears=intck(y, date1, date2);
put newyears;
6
2番目の例では、経過日数は1日のみでもINTCKは1の値を返します。これは、2012年12月31日から2013年1月1日までの間にYEAR間隔の開始点が含まれるためです。ただし、3番目の例では、経過日数は364日でも0の値が返されます。この結果が返されるのは、2013年1月1日から2013年12月31日の間にYEAR間隔の開始点が含まれないためです。
4番目の例では、2010年1月1日から2013年1月1日までの間に半年の間隔が6回含まれるため、SASは6の値を返します。(終了日が2012年12月31日の場合、SASは5回の間隔を数えます)。5番目の例では、2013年1月7日から2013年4月1日の間には第1日を月曜日とする2週間の間隔が6回含まれるため、SASは6の値を返します。6番目の例では、SASは値27を返します。この例では2013年1月1日から2013年2月1日までの間に土曜日のみを週末として数えるため、この期間には27日の平日が含まれることになります。
7番目の例では、引数に変数が使用されています。

例2: メソッドの比較例

methodが異なる値の例を次に示します。
data a;
   interval='month';
   start='14FEB2013'd;
   end='13MAR2013'd;
   months_default=intck(interval, start, end);
   months_discrete=intck(interval, start, end, 'd');
   months_continuous=intck(interval, start, end, 'c');
   output;
   
   end='14MAR2013'd;
   months_default=intck(interval, start, end);
   months_discrete=intck(interval, start, end, 'd');
   months_continuous=intck(interval, start, end, 'c');
   output;

   start='31JAN2013'd;
   end='01FEB2013'd;
   months_default=intck(interval, start, end);
   months_discrete=intck(interval, start, end, 'd');
   months_continuous=intck(interval, start, end, 'c');
   output;
   format start end date9.;
run;

proc print data=a;
run;
メソッド間の比較
メソッド間の比較

関連項目:

関数:
システムオプション:
INTERVALDS= System Option (SASシステムオプション: リファレンス)
前のページ|次のページ|ページの先頭へ