指定した時間間隔で日付、時間または日時の値を増分し、日付、時間または日時の値を返します。
| カテゴリ: | 日付と時間 |
WEEK、SEMIYEAR、QTR、HOURなどの時間間隔が含まれる文字定数、変数または式を指定します。Intervalは、大文字または小文字で表示できます。intervalに使用可能な値のリストについては、Intervals Used with Date and Time Functions (SAS言語リファレンス: 解説編)を参照してください。
間隔名の3つの部分は次のとおりです。
基本間隔の種類の名前を指定します。たとえば、YEARで年間隔を指定します。
乗数を指定します(省略可能)。基本タイプの間隔の期間に対する倍数と同等の間隔を設定します。たとえば、間隔YEAR2は2年の期間の間隔、つまり隔年です。
| 参照項目 | 乗数とシフト間隔を使用した日時の増分 詳細については、を参照してください。 |
シフトインデックスを指定します(省略可能)。間隔の開始時点を指定したサブ期間にシフトします。たとえば、YEAR.3で、各カレンダ年の3月1日に開始して翌年の2月末に終了するようにシフトされた年間隔を指定します。
| 制限事項 | シフトインデックスは、間隔全体のサブ期間の数以下にする必要があります。たとえば、2年間隔では25番目の月は存在しないため、YEAR2.24は使用できますがYEAR2.25はエラーになります。 |
| デフォルトのシフト期間が間隔の種類と同じ場合、複数期間の間隔のみを任意のシフトインデックスでシフトできます。たとえば、MONTHの種類の間隔はデフォルトではMONTHのサブ期間でシフトします。そのため、シフトインデックスで月間隔はシフトできません。ただし、各MONTH2間隔には2つのMONTH間隔が含まれるため、シフトインデックスで2か月間隔をシフトできます。たとえば、間隔名MONTH2.2で、偶数月の1日目に開始する2か月の期間を指定します。 | |
| 参照項目 | 乗数とシフト間隔を使用した日時の増分 詳細については、を参照してください。 |
開始点を識別するSAS日付、時間または日時の値を表すSAS式を指定します。
日付、時間または日時の間隔を表す負、正またはゼロの整数を指定します。Incrementは、start-fromの値をシフトする間隔数です。
間隔内のSAS日付の位置を制御します。alignmentは引用符で囲む必要があります。Alignmentには次のいずれかの値を指定できます。
返された日付値または日時値を間隔の開始点に配置するように指定します。
| 別名 | B |
返された日付値または日時値を間隔の中間点(開始位置と終了位置の値の平均)に配置するように指定します。
| 別名 | M |
返された日付値または日時値を間隔の終了点に配置するように指定します。
| 別名 | E |
返された日付を入力日付と同じ場所に配置するように指定します。
| 別名 | S |
| SAMEDAY | |
| 参照項目 | 詳細については、SAME配置を参照してください。 |
| デフォルト | BEGINNING |
| 参照項目 | SAS日付出力の間隔内の位置合わせ 詳細については、を参照してください。 |
定義する間隔を指定します。
x=intnx('week', '17oct03'd, 6);
put x date9.;data _null_;
/* The following statement creates expected results. */
date1=intnx('dtday', '01aug11:00:10:48'dt, 1);
/* The following two statements create unexpected results. */
date2=intnx('dtday', '01aug11'd, 1);
date3=intnx('dtday', '01aug11:00:10:48'd, 1);
put 'Correct Datetime Value ' date1= datetime19. /
'Incorrect Datetime Value ' date2= datetime19. /
'Incorrect Datetime Value ' date3= datetime19.;
run;
Correct Datetime Value date1=02AUG2011:00:00:00 Incorrect Datetime Value date2=02JAN1960:00:00:00 Incorrect Datetime Value date3=02JAN1960:00:00:00
intnx('month', '15mar2000'd, 5, 'same'); returns 15AUG2000
intnx('year', '29feb2000'd, 2, 'same'); returns 28FEB2002
intnx('month', '31aug2001'd, 1, 'same'); returns 30SEP2001
intnx('year', '01mar1999'd, 1, 'same'); returns 01MAR2000 (the first day of the
3rd month of the year)
intnx('year', '29feb2000'd, 2);では、INTNX関数は値01JAN2002を返します。この値は、開始日の年(2000)から2年後の最初の日付です。
intnx('year', '29feb2000'd, 2, 'same');では、INTNX関数は値28FEB2002を返します。この場合、開始日は2000年で、結果となる年は2年後(2002)、月は同月(2月)、日付は28日が2002年2月29日に最も近いため、これらの値になります。
options intervalds=(interval=libref.dataset-name);
|
SASステートメント
|
結果
|
|---|---|
yr=intnx('year', '05feb94'd, 3);
put yr / yr date7.; |
13515 01JAN97 |
x=intnx('month', '05jan95'd, 0);
put x / x date7.; |
12784 01JAN95 |
next=intnx('semiyear', '01jan97'd, 1);
put next / next date7.; |
13696 01JUL97 |
past=intnx('month2', '01aug96'd, -1);
put past / past date7.; |
13270 01MAY96 |
sm=intnx('semimonth2.2', '01apr97'd, 4);
put sm / sm date7.; |
13711 16JUL97 |
x='month'; date='1jun1990'd; nextmon=intnx(x, date, 1); put nextmon / nextmon date7.; |
11139 01JUL90 |
x1='month '; x2=trim(x1); date='1jun1990'd - 100; nextmonth=intnx(x2, date, 1); put nextmonth / nextmonth date7.; |
11017 01MAR90 |
|
SASステートメント
|
結果
|
|---|---|
date1=intnx('month', '01jan95'd, 5, 'beginning');
put date1 / date1 date7.; |
12935 01JUN95 |
date2=intnx('month', '01jan95'd, 5, 'middle');
put date2 / date2 date7.; |
12949 15JUN95 |
date3=intnx('month', '01jan95'd, 5, 'end');
put date3 / date3 date7.; |
12964 30JUN95 |
date4=intnx('month', '01jan95'd, 5, 'sameday');
put date4 / date4 date7.; |
12935 01JUN95 |
date5=intnx('month', '15mar2000'd, 5, 'same');
put date5 / date5 date9.; |
14837 15AUG2000 |
interval='month'; date='1sep2001'd; align='m'; date4=intnx(interval, date, 2, align); put date4 / date4 date7.; |
15294 15NOV01 |
x1='month '; x2=trim(x1); date='1sep2001'd + 90; date5=intnx(x2, date, 2, 'm'); put date5 / date5 date7.; |
15356 16JAN02 |
options intervalds=(weekdaycust=dstest);
data dstest;
format begin end date9.;
begin='01jan2008'd; end='01jan2008'd; output;
begin='02jan2008'd; end='02jan2008'd; output;
begin='03jan2008'd; end='03jan2008'd; output;
begin='04jan2008'd; end='06jan2008'd; output;
begin='07jan2008'd; end='07jan2008'd; output;
begin='08jan2008'd; end='08jan2008'd; output;
begin='09jan2008'd; end='09jan2008'd; output;
begin='10jan2008'd; end='10jan2008'd; output;
begin='11jan2008'd; end='13jan2008'd; output;
begin='14jan2008'd; end='14jan2008'd; output;
begin='15jan2008'd; end='15jan2008'd; output;
run;
data _null_;
format start date9. endcustom date9.;
start='01jan2008'd;
do i=0 to 9;
endcustom=intnx('weekdaycust', start, i);
put endcustom;
end;
run;01JAN2008 02JAN2008 03JAN2008 04JAN2008 07JAN2008 08JAN2008 09JAN2008 10JAN2008 11JAN2008 14JAN2008