포스팅 목차
75. Display your age in months.
* 나이를 월단위로 계산하라.
- [날짜 함수]날짜 함수를 사용한 기준월 사이의 기간(Gap) 계산
|
1. Oracle(오라클)
months_between 함수를 사용하여서 2개 날짜 사이의 개월 수 차이를 계산한다.
Oracle Programming |
select floor(months_between(sysdate,'15-aug-1947')) "age_in_months"
from dual
2. Python Pandas(파이썬)
- 참고 : 오늘 날짜 출력
Python Programming |
from datetime import datetime
today = datetime.today().strftime('%Y-%m-%d')
print(today)
import time
t = time.time()
# 지역표준시
today = time.strftime("%Y-%m-%d", time.localtime(t))
print( today )
# UTC(그리니치 표준시) 기준
today = time.strftime("%Y-%m-%d", time.gmtime(t))
print( today )
Results |
2021-03-12
2021-03-12
2021-03-11
2개 날짜 사이의 월 단위 차이를 계산하는 diff_month 함수를 생성하여서 2개 날짜 사이의 개월 수 차이를 계산한다.
Python Programming |
from datetime import datetime
def diff_month(d1, d2):
return (d1.year - d2.year) * 12 + d1.month - d2.month
diff_month(datetime.today(), datetime(2020, 1, 20))
Results |
14
relativedelta 함수를 사용하여서 날짜 사이의 차이를 계산한다. 반환된 개체에서 년도와 월에 해당하는 개체를 추출하여 월 단위로 환산한다.
Python Programming |
from dateutil.relativedelta import relativedelta
r = relativedelta(datetime.today(), datetime(2020, 1, 20))
print(r)
r.months + (12*r.years) +1
Results |
relativedelta(years=+1, months=+1, days=+20, hours=+8, minutes=+30, seconds=+27, microseconds=+756891)
14
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
날짜에서 년도와 월을 추출하여서 2개 날짜 사이의 개월 수 차이를 계산한다.
R Programming |
%%R
number_of_months = (year(Sys.Date()) - year(as.Date('2020-01-20'))) * 12 + month(Sys.Date()) - month(as.Date('2020-01-20'))
number_of_months
Results |
[1] 14
lubridate::interval 함수를 사용하여서 2개 날짜 사이의 개월 수 차이를 계산한다. 반환된 시간 간격(time interval) 개체에서 날짜 사이의 차이를 월단위로 계산한다.
R Programming |
%%R
print(interval(mdy(01202020), today()) %/% months(1))
lubridate::interval(as.Date('2020-01-20'), today()) %/% months(1)
Results |
[1] 13
[1] 1
seq 함수를 사용하여서 2개 날짜 사이를 월 단위의 시계열 객체를 생성 후 객체 길이를 계산한다.
R Programming |
%%R
length(seq(from=as.Date('2020-01-20'), to=today(), by='month'))
Results |
[1] 14
4. R Dplyr Package
5. R sqldf Package
- [참고] DB별 문자 함수 비교 : https://en.wikibooks.org/wiki/SQL_Dialects_Reference/Functions_and_expressions/String_functions
2개 날짜 사이의 날짜 차이를 계산 후 월단위로 환산한다.
R Programming |
%%R
sqldf("select round( (julianday('now')-julianday('2020-01-20')) /30) months_gap ")
Results |
months_gap
1 14
6. Python pandasql Package
Python Programming |
ps.sqldf("select round( (julianday('now')-julianday('2020-01-20')) /30) months_gap")
Results |
months_gap | |
0 | 14.0 |
7. R data.table Package
8. SAS Proc SQL
- Intck 함수, Datdif 함수를 사용하여서 2개 날짜 사이의 개월 수 차이를 계산한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select intck('month', input('20200120',yymmdd8.), TODAY()) AS month_gap_1,
ROUND(DATDIF(input('20200120',yymmdd8.), TODAY(), 'ACT/ACT') / 30 ) AS month_gap_2
FROM EMP(OBS=1);
QUIT;
PROC PRINT;RUN;
Results |
OBS | month_gap_1 | month_gap_2 |
1 | 15 | 15 |
9. SAS Data Step
- Intck 함수를 사용하여서 2개 날짜 사이의 개월 수 차이를 계산한다.
SAS Programming |
%%SAS sas
DATA STATSAS_2;
* 오늘 날짜와 YEAR 함수;
THIS_YEAR_1 = YEAR(TODAY());
THIS_YEAR_2 = YEAR(DATE());
format base_date base_date_1 yymmddn8.;
base_date = input('20200120',yymmdd8.);
base_date_1 = mdy(1,20,2020);
month_gap_1 = intck('month', input('20200120',yymmdd8.), TODAY());
/* 참고 */
month_gap_2 = ROUND(DATDIF(input('20200120',yymmdd8.), TODAY(), 'ACT/ACT') / 30 ); * 날짜GAP 환산;
RUN;
PROC PRINT;RUN;
Results |
OBS | THIS_YEAR_1 | THIS_YEAR_2 | base_date | base_date_1 | month_gap_1 | month_gap_2 |
1 | 2021 | 2021 | 20200120 | 20200120 | 15 | 15 |
10. Python Dfply Package
Python Programming |
from datetime import datetime
from dateutil.relativedelta import relativedelta
def diff_month(d1, d2):
return (d1.year - d2.year) * 12 + d1.month - d2.month
diff_month(datetime.today(), datetime(2020, 1, 20))
emp >> mutate(number_of_months = diff_month(datetime.today(), datetime(2020, 1, 20)) ) >> \
select(~X.job,~X.mgr,~X.sal,~X.comm) >> head()
Results |
empno | ename | hiredate | deptno | number_of_months | |
0 | 7369 | SMITH | 1980/12/17 | 20 | 16 |
1 | 7499 | ALLEN | 1981/02/20 | 30 | 16 |
2 | 7521 | WARD | 1981/02/22 | 30 | 16 |
3 | 7566 | JONES | 1981/04/02 | 20 | 16 |
4 | 7654 | MARTIN | 1981/09/28 | 30 | 16 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
반응형
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 전처리- 날짜함수 예제] 현재 시간 출력 - 79 (0) | 2021.08.31 |
---|---|
[데이터 전처리- 날짜함수] 가장 빠른 요일에 해당하는 날짜 반환 - 78 (0) | 2021.08.31 |
[데이터 전처리- 날짜함수 예제] 날짜 함수를 사용한 연령계산(나이계산) & Round 함수(반올림 함수) - 74 (0) | 2021.08.30 |
[데이터 전처리- 문자함수 예제] 코드테이블 결합과 조건문 - 73 (0) | 2021.08.30 |
[데이터 전처리- 문자함수 예제] 문자열 변경 - 72 (0) | 2021.08.30 |
댓글