본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[데이터 전처리- 날짜함수 예제] 특정 기간 전후 날짜 계산- 날짜 증감 - 80

by 기서무나구물 2021. 8. 31.

포스팅 목차

     

    80. Display the date three months before the current date

     

    * 현재 날짜를 기준으로 3개월 이전 날짜를 출력하시오.


    • [날짜 함수] 특정 기간 전후 날짜 계산- 날짜 증감
    • Oracle : add_months() 함수
    • 파이썬 Pandas : relativedelta(), timedelta()
    • R 프로그래밍 : months(), as.difftime(), seq() 함수
    • R Dplyr :
    • R sqldf : date() 함수의 'start of month', '+3 month' 옵션
    • Python pandasql : date() 함수의 'start of month', '+3 month' 옵션
    • R data.table :
    • SAS Proc SQL : intnx() 함수
    • SAS Data Step : intnx() 함수, PUT() 함수 - 날짜 포맷 변경
    • Python Dfply : relativedelta()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    add_months 함수를 사용하여서 현재 날짜(sysdate)를 기준으로 3개월 이전 날짜를 출력한다.

    Oracle Programming
    select add_months(sysdate,-3) bef_day_3mon
    from   dual

     


    2. Python Pandas(파이썬)

    relativedelta 함수를 사용하여서 현재 날짜를 기준으로 3개월 이후 날짜를 출력한다.

    Python Programming
    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    print(   datetime.today()+ relativedelta(months=3) )
    display( datetime.today()+ relativedelta(months=3) )
    
    datetime.now().date() + relativedelta(months=+3)

     

    Results
    2021-06-13 09:02:09.215540
    
    datetime.datetime(2021, 6, 13, 9, 2, 9, 216558)
    
    datetime.date(2021, 6, 13)

     


    timedelta 함수를 사용하여서 현재 날짜에 단순하게 90일을 추가한다.

    Python Programming
    import calendar
    from datetime import datetime,timedelta
    
    print (datetime.now().date() + timedelta(3*30))

     

    Results
    2021-06-11

     


    3. R Programming (R Package)

    현재 날짜에 3개월을 더하여서 3개월 이후 날짜를 출력한다.

    R Programming
    %%R
    
    Sys.Date() + months(3)

     

    Results
    [1] "2021-06-13"

     


    as.difftime 함수를 사용하여서 현재 날짜에 단순하게 90일을 추가한다. as.difftime 함수에서 months는 지원 안 함.

    R Programming
    %%R
    
    Sys.Date()+as.difftime(90,units="days")

     

    Results
    [1] "2021-06-11"

     


    seq 함수를 사용하여서 현재 일자에서 월단위로 4개월 날짜(현재 날짜가 포함된 월을 포함)를 생성 후 마지막 월의 날짜를 추출한다.

    R Programming
    %%R
    
    print(seq(Sys.Date(), by = "month", length.out = 4))
    
    seq(Sys.Date(), by = "month", length.out = 4)[4]

     

    Results
    [1] "2021-03-13" "2021-04-13" "2021-05-13" "2021-06-13"
    [1] "2021-06-13"

     


    4. R Dplyr Package

     


    5. R sqldf Package

    • Month_lastday : 당월 마지막 날짜를 계산하기 위하여 date 함수의 "start of month" 옵션을 지정하여서 다음 달 초일자(1일)을 구한 후 -1일을 하여서 당월 마지막 날짜를 계산한다.
    • add_month : date 함수에 '+3 month'을 지정하여서 3개월이 경과한 날짜를 계산한다.
    R Programming
    %%R
    
    sqldf("select date('now','start of month','+1 month','-1 day') Month_lastday,
                  date('now','+3 month') add_month")

     

    Results
      Month_lastday  add_month
    1    2021-03-31 2021-06-13

     


    6. Python pandasql Package

     

    Python Programming
    ps.sqldf("select date('now','start of month','+1 month','-1 day') Month_lastday, date('now','+3 month') add_month")

     

    Results
      Month_lastday add_month
    0 2021-03-31 2021-06-13

     


    7. R data.table Package

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select intnx('month',today(),0,'E') as last_day  format=yymmddn8.,
               intnx('month',today(),3,'S') as add_month format=yymmddn8.
        FROM   EMP(OBS=1);
    QUIT;
    PROC PRINT;RUN;

     

    Results
     
    OBS last_day add_month
    1 20210430 20210717

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
         format last_day add_month yymmddn8.;
         last_day  = intnx('month',today(),0,'E');
         add_month = intnx('month',today(),3,'S');
    
         * 문자형 변수로 변환;
         last_day_char  = put(intnx('month',today(),0,'E'),yymmddn8.);
         add_month_char = put(intnx('month',today(),3,'S'),yymmddn8.);
    
    RUN;
    
    PROC PRINT;RUN;

     

    Results
     
    OBS last_day add_month last_day_char add_month_char
    1 20210430 20210717 20210430 20210717

     


    10. Python Dfply Package

     

    Python Programming
    from datetime import datetime
    from dateutil.relativedelta import relativedelta
    
    emp >> mutate( Month_afterday  = datetime.today()+ relativedelta(months=3) ,
                   Month_afterday_2 = datetime.now().date() + relativedelta(months=+3)) >> \
      select(~X.job,~X.mgr,~X.sal,~X.comm) >> head()

     

    Results
      empno ename hiredate deptno Month_afterday Month_afterday_2
    0 7369 SMITH 1980/12/17 20 2021-08-04 10:06:46.904561 2021-08-04
    1 7499 ALLEN 1981/02/20 30 2021-08-04 10:06:46.904561 2021-08-04
    2 7521 WARD 1981/02/22 30 2021-08-04 10:06:46.904561 2021-08-04
    3 7566 JONES 1981/04/02 20 2021-08-04 10:06:46.904561 2021-08-04
    4 7654 MARTIN 1981/09/28 30 2021-08-04 10:06:46.904561 2021-08-04

     


    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]   SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트

    반응형

    댓글