포스팅 목차
212. INTNX
날짜(Date), 시간(Time) 또는 datetime 값을 지정한 시간 간격(time interval) 만큼 증가시켜서 경과된 날짜,시간 또는 datetime 값을 반환한다.
Category: | SAS 날짜/시간 함수 (Date and Time) |
문 법
INTNX (interval<multiple><.shift-index>, start-from, increment<,alignment>) |
Arguments
- interval
는 문자형 상수, 변수 또는 시간 간격(날짜 구간값, time interval)이 포함된 표현식(예: 주(Week), 반년(Semiyear), 분기(QTR) 또는 시간(Hour))을 지정한다. interval 은 대문자 또는 소문자로 지정할 수 있다.
기본 구간 간격 이름에 Multipliers (승수)와 shift (이동) 인덱스를 조합하여 보다 복잡한 구간 간격을 지정할 수 있다. 구간 간격(interval) 이름의 일반적인 형태는 다음과 같다.
1) interval<multiple.shift-index>
구간 간격 이름을 구성하는 세 부분은 다음과 같다.
(1) interval
기본 구간 간격 유형의 이름을 지정한다.예를 들어 YEAR는 연도 간격을 지정한다.
(2) multiple
기본적인 구간 간격 유형의 기간에 대한 배수(multiple)와 동일한 구간 간격을 설정하기 위한 multiplier(배수) 를 지정한다. (선택적인 옵션으로 지정하지 않을 수 있다.) 예를 들어, 구간 간격 YEAR2는 2년의 기간 간격, 즉 격년을 표시한다.
(3) shift-index
지정된 하위 기간의 시작 지점에서 시작하도록 구간 간격을 이동시키는 shift index(이동 인덱스)를 지정한다. 이 옵션은 사용자가 선택적으로 지정 할 수 있다. 예를 들어, YEAR.3은 매년 3월 1일에 시작하여 다음 해 2월 말에 종료되도록 구간의 시작 지점을 이동한 연도별 기간을 지정한다. Shift index는 전체 구간 간격의 하위 구간의 개수보다 작아야 한다. 예를 들어, 2 년 구간 간격에는 25 번째 달이 존재하지 않으므로 YEAR2.24는 사용할 수 있지만 YEAR2.25는 오류를 발생한다.
(4) start-date : 시작하는 SAS 날짜, 시간 또는 datetime 값을 나타내는 SAS 표현식을 지정한다.
(5) increment
날짜, 시간 또는 datetime 구간 간격을 나타내는 음수, 양수 또는 0의 정수를 지정한다. Increment 는 start-from (시작 지점)을 이동시키는 구간 간격 수를 지정한다.
Optional Arguments
- 'alignment'
해당 구간 사이의 SAS 날짜에 대한 위치를 제어한다. alignment 는 따옴표로 감싸야 합니다. Alignment 에는 다음 중 하나의 값을 지정할 수 있다.
alignment | 설명 | 별칭 |
BEGINNING | 반환되는 날짜 또는 datatime값을 해당구간의 시작값으로 반환한다.(기본값) | B |
MIDDLE | 반환되는 날짜 또는 datatime값을 해당구간의 가운데 중앙값(시작 위치와 종료 위치 값의 평균)을 반환한다. | M |
END | 반환되는 날짜 또는 datatime값을 해당구간의 마지막 값을 반환한다. | E |
SAMEDAY | 반환되는 날짜 또는 datatime값을 입력한 날자와 동일 날을 반환한다. | S / SAMEDAY |
- custom-interval
는 사용자가 정의한 간격을 지정합니다.
상세 내용
The Basics
INTNX 함수는 DAY, WEEK, QTR, MINUTE 등과 같은 간격 또는 사용자가 정의한 사용자 정의 구간 간격 단위로 날짜, 시간 또는 datetime 값을 증가시킨다. Increment (증감값, 증분값) 은 시작 날짜, 시간 또는 datetime 값과 사용자가 지정한 시간 구간 간격의 개수를 기반으로 한다.
INTNX 함수는 start-from 인수에 사용자 지정한 구간 간격이 경과된 SAS 날짜, 시간 또는 Datetime 값을 반환한다.(SAS 날짜 값을 달력 날짜로 변환하려면 DATE9. 형식과 같은 유효한 SAS 날짜 형식을 사용한다.) 다음 예제는 2003년 10월 17일 주에서 6주가 경과한 해당 주의 시작일을 반환한다.
x=intnx('week', '17oct03'd, 6);
put x date9.;
INTNX 함수는 '23NOV2003' 을 반환한다.
Date and Datetime Intervals
SAS datetime 값에 사용되는 구간 간격은 SAS datetime 구간 간격 형태로 지정해야한다. Datetime 구간 간격을 지정하기 위해서는 임의의 날짜 구간 간격에 접두어 "DT"를 추가하면 된다. 예를 들어, MONTH는 SAS 날짜 구간 간격이고, DTMONTH는 SAS datetime 구간 간격입니다.마찬가지로 YEAR은 SAS 날짜 구간 간격이고, DTYEAR은 SAS datetiem 구간 간격입니다.
구간 간격 함수를 사용하여서 정확한 결과를 얻기 위해서는 날짜 값에 날짜 구간 간격을 사용하고, datetime 값에 datetime 구간 간격을 사용해야 한다. 날짜 값에 datetime 구간 간격을 사용하는 경우 SAS는 오류 메시지를 반환하지 않지만 올바르지 안은 결과를 반환한다.
SAS Statements |
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;
Results |
Correct Datetime Value date1=02AUG2011:00:00:00
Incorrect Datetime Value date2=02JAN1960:00:00:00
Incorrect Datetime Value date3=02JAN1960:00:00:00
SAS 날짜 출력 간격 정렬
일반적으로 SAS 날짜 값은 interval 인수에서 지정한 시간 간격의 시작점으로 배치된다.
선택적으로 지정 가능한 옵션 alignment 인수(정렬 인수)를 사용하여 반환되는 날짜의 정렬 방식을 지정하여 날짜를 배치할 수 있다. BEGINNING, MIDDLE 또는 END 값은 각각 날짜를 구간 간격의 시작점, 중간점 또는 종료점에 배치한다.
SAME 정렬과 배치(SAME Alignment)
alignment 인수로 SAME 값을 지정한 경우 INTNX 함수는 지정한 구간 간격으로 날짜를 이동 한 후 해당 구간 간격에서 시작 날짜와 동일한 달력 날짜를 반환한다. 동일한 달력 날짜는 구간 간격이 아닌 구간 간격에 대한 이동 기간을 기준으로 날짜를 정렬한 후 날짜를 배치한다. 유효한 이동 기간(shift periods)은 Intervals by Category in SAS Formats and Informats: Reference 참조하라.
Shift 기간의 대부분의 값은 해당 구간 간격과 동일하다. 이에 대한 예외 사항은 구간 간격 WEEK, WEEKDAY, QTR, SEMIYEAR, YEAR 및 이에 상응하는 DT 이다. WEEK 및 WEEKDAY 구간 간격은 이동 기간(shift period) 이 DAYS 이고, QTR, SEMIYEAR 및 YEAR 구간 간격은 이동기간이 MONTH 단위 이다. 예를 들어, YEAR 인수와 함께 SAME alignment를 사용하는 경우, 결과는 구간 간격의 이동 기간인 MONTH를 기준으로 동일한 일자(동일한 월과 일자)에 배치된다. 결과가 YEAR 구간 간격의 동일한 날에 배치되지 않는다. 배수 구간 간격(multiple interval)을 지정한 경우, 기본 이동 구간 간격(shift interval)은 배수 구간 간격이 아닌 구간 간격을 기준으로 한다.
QTR, SEMIYEAR 및 YEAR 간격과 SAME alignment을 사용하는 경우 계산된 날짜는 입력 날짜가 속한 구간 간격의 시작 일자와 입력 날짜의 개월수 차이 계산한 후 inteval 인수를 기준으로 경과된 기간이 속한 구간 간격의 시작 일자에서 해당 개월수 차이가 경과된 월에 배치한다. 해당 월의 날짜는 가능하면 동일한 날짜로 배치된다. 그러나, 월별로 일수가 다르기 때문에 월의 일자를 항상 일치시킬 수는 없다.
날짜 정렬 및 배치 구간 간격(Alignment Intervals)
입력 날짜의 정렬을 기준으로 계산된 결과 날짜를 배치하려면 alignment 인수에 SAME 값을 사용하라.
intnx('week', '15mar2000'd, 1, 'same'); returns 22MAR2000
intnx('dtweek','15mar2000:8:45'dt, 1, 'same'); returns 22MAR2000:08:45:00
intnx('year', '15mar2000'd, 5, 'same'); returns 15MAR2005
날짜 조정하기
증분된 구간 간격에 날짜가 존재하지 않으면 INTNX 함수는 해당 날짜를 자동으로 조정한다. 예를 들어,
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 함수는 시작 일자의 해(2000)으로부터 2년이 경과한 연도의 시작일자(01JAN2002)를 반환한다.
예제 intnx('year', '29feb2000'd, 2, 'same') : INTNX 함수는 28FEB2002 값을 반환한다.이 경우 시작 날짜는 2000년부터 시작하여서, 연도는 2년 후(2002), 월은 같은 월(2월), 날짜는 28일로 반환되는 이는 2002년 2월 29일에 가장 가까운 날짜이기 때문이다.
사용자 지정 구간 간격(Custom Intervals)
사용자 지정 구간 간격은 SAS 데이터 세트에서 정의된다. 데이터 세트에는 begin 변수가 포함되어야 하며, end 변수와 season 변수를 포함할 수도 있다. 각 관측치는 구간 간격의 시작점을 포함하는 begin 변수와 구간 간격의 끝을 포함하는 end 변수(존재하는 경우)로 하나의 구간 간격을 나타낸다. 구간 간격은 오름차순으로 나열해야 한다. 구간 간격 사이에는 간격(gap)이 존재 할 수 없으며 또한 간격이 겹칠 수 없다.
SAS 시스템 옵션 INTERVALDS=는 사용자 지정 구간 간격을 정의하고 구간 간격 데이터 세트를 새로운 구간 간격 이름과 연결하는 데 사용된다. 다음 예제는 INTERVALDS=시스템 옵션을 지정하는 방법을 보여준다.
options intervalds=(interval=libref.dataset-name);
Argument
interval
구간 간격의 이름을 지정한다. interval 의 값은 libref.dataset-name 에서 명명된 데이터 세트이다.
libref.dataset-name
사용자가 지정한 공휴일이 포함된 파일의 라이브러리 참조자 이름과 데이터 세트 이름을 지정한다.
소매 달력 구간 간격(Retail Calendar Intervals)
소매업계에서는 1년을 13주로 구성된 4개의 기간으로 나누어 데이터를 계산하는 경우가 있다. 기간 형식은 4-4-5, 4-5-4 또는 5-4-4를 기반으로 하며, 첫 번째, 두 번째 및 세 번째 숫자는 각각 각 기간의 첫 번째, 두 번째 및 세 번째 달에 존재하는 주(weeks)의 개수를 지정한다.
관련 함수
함수명 | 함수내용 |
DATDIF |
두 날짜 사이의 차이를 계산한다. |
DATE | SAS 날짜 값으로써 현재 날짜를 반환한다. |
INTCINDEX | 날짜, 시간 또는 datetime 구간이 주어졌을때 순환 지수(순환 주기, 순환 지표, cycle index) 값을 반환한다. |
INTCK | 2개의 날짜,시간,datetime 등의 차이를 구해 정수값을 반환한다. |
INTCYCLE | 날짜, 시간 또는 datetime 구간이 주어졌을때 다음으로 높은 (higher) 계절 주기의 날짜, 시간 또는 datetime 구간을 반환한다. |
INTFIT | 두 날짜 사이에 정렬되어 있는 time interval(시간 간격)을 반환한다. |
INTFMT | 날짜, 시간 또는 datetime 구간이 지정되었을때 사용하면 좋을 SAS format을 알려주는 함수 |
INTGET | Datetime 값들 또는 세가지 날짜 값들에 대한 간격(interval) 을 리턴 |
INTINDEX | 날짜, 시간 또는 datetime 구간이 주어졌을때 계절별 index를 반환한다. |
INTNX | 주어진 구간만큼, 날짜,시간,datetime등이 지난 날짜값을 반환한다. |
INTSEAS | 날짜, 시간 또는 datetime 구간이 주어졌을때 계절별 주기의 길이를 반환한다. |
INTSHIFT | 기본 interval에 상응하는 이동 간격(교대 간격, Shift Interval)을 반환한다. |
INTTEST |
시간 간격(time interval)이 유효하면 1을 반환하고, 그렇지 않으면 0을 반환한다. |
YRDIF | 사용자가 지정한 2개 날짜(date) 사이의 년도 차이를 계산한다. |
예 제
예 제 1 :
지정한 날짜 뒤의 날짜를 반환한다.
SAS Statements |
data INTNX1;
* 3년뒤의 초일자 반환;
yr = intnx('year','05feb94'd,3);
put yr / yr date7.;
* 월의 0년을 반환한다.( 기본이 시작값 반환이므로 해당월 초일자 반환);
x = intnx('month','05jan95'd,0);
put x / x date7.;
* 반년뒤의 값을 반환한다.;
next = intnx('semiyear','01jan97'd,1);
put next / next date7.;
* 1960년 1월 1일을 기준으로 2개월 단위(3월,5월..)로 증가하므로, 기준값에서 -1을 할 경우 5월1일을 반환(0를 주었을 경우 7월1일임.);
past = intnx('month2','01aug96'd,-1);
put past / past date7.;
run;
Results |
yr x
13515(01JAN97) 12784(01JAN95)
next past
13696(01JUL97) 13270(01MAY96)
예 제 2 :
alignment를 사용하여 지정한 구간 뒤의 날짜를 반환한다.
SAS Statements |
data INTNX2;
date1 = intnx('month','01jan95'd,5,'beginning');
put date1 / date1 date7.;
date2 = intnx('month','01jan95'd,5,'middle');
put date2 / date2 date7.;
date3 = intnx('month','01jan95'd,5,'end');
put date3 / date3 date7.;
date4 = intnx('month','01jan95'd,5,'sameday');
put date4 / date4 date7.;
date5 = intnx('month','15mar2000'd,5,'same');
put date5 / date5 date9.;
run;
Results |
date1 date2 date3
12935(01JUN95) 12949(15JUN95) 12964(30JUN95)
date4 date5
12935(01JUN95) 14837(15AUG2000)
SAS 함수(SAS Function) 리스트 링크 |
엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크 |
SAS 데이터 스텝 구문 리스트(SAS Data Step Statement) |
'SAS > SAS 함수' 카테고리의 다른 글
【SAS 함수】 214. INTZ (0) | 2021.10.03 |
---|---|
【SAS 함수】 213. INTRR (0) | 2021.10.03 |
【SAS 함수】 211. INTCK (0) | 2021.10.03 |
【SAS 함수】 210. INT (0) | 2021.10.03 |
【SAS 함수】 209. INPUTN (0) | 2021.10.03 |
댓글