728x90

날짜다루기는 자주 있는 작업이 아니라도 다시 쓰려고 하면 기억이 가물 가물

SAS에서는 어떻게 하더라... 비슷 비슷해서 헷갈리기도 하고

그려면 R에서는 어떻게 하나? 또 헷갈립니다.

그래서 우선 SAS 부터 정리를 시작해 봅니다.(그래도 만만한게 SAS 인지라)

 

SAS에서는 1960년 1월0일이랑 숫자 0과 같다???

R에서는 1970년 1월1일이랑 숫자0과 같다.

 

R에서는 1970년 1월1일이랑 숫자 0 같다

x <- 0

x

as.POSIXct.Date(x)   [1] "1970-01-01 09:00:00 KST"

 

SAS 에서는 1960년 1월1일이랑 숫자 0 같다

DATA a1;

INFORMAT nalja yymmdd10.;

INPUT nalja;

CARDS;

1960-01-01

;

PROC PRINT;RUN;

SAS 날짜

DATA a1;       
/* (1) SAS Date 값을 만드는 함수       */
nalja1=DATE();        /* 현재의 날짜를 SAS Date 형태의 값으로 저장, TODAY()와 같다 */
nalja2=TODAY();      /* 현재의 날짜를 SAS Date 형태의 값으로 저장   */
nalja2=DATETIME();  /* 현재의 시간을 SAS Datetime 값으로 번환 */
nalja3=TIME();

 

R날짜

Sys.Date()          #  [1] "2020-08-11"    현재의 날짜. D 대문자... 

class(Sys.Date())  #  [1] "Date"            객체는 Date 객체

 

Sys.time()          #  [1] "2020-08-11 17:50:54 KST"      현재의 시간. t 소문자... 

now <- Sys.time()

class(now)         # [1] "POSIXct" "POSIXt"

 

date()               # [1] "Tue Aug 11 17:52:36 2020"

class(date())       # [1] "character"

 

SAS 날짜

/* (2) SAS Date 값을 다루는 함수       */
nal_mon1=MONTH(nalja1); /* 오늘 날짜에서 월을 추출... 2015년 1월 22일이면   1    */
nal_date1=DAY(nalja1);      /* 오늘 날짜에서 일을 추출... 2015년 1월 22일이면  22    */
nal_yr1=YEAR(nalja1);        /* 오늘 날짜에서 연도를 추출.... 2015년 1월 22일이면  2015  */
nal_qtr1=QTR(nalja1);        /* 분기별 추출 */
nal_wk1=WEEKDAY(nalja1); /* 몇째 주 추출 */
nal_sec1=SECOND(nalja1);   /* 초단위 */
nal_min1=MINUTE(nalja1);   /* 현재의 몇분인가? */
nal_hr1=HOUR(nalja1);      /* 현재 몇 시인가? 오후 3시이면 15   */
nalja4=MDY(month,day,year);     /* 월, 일, 연도 데이터가 있으면 날짜형 변수로 변경... DATE() 와 같다 */
nalja3=DHMS(nalja1,15,33,0);     /* SAS Date를 SAS Datetime으로 바꾼다 */

 

R날짜

install.packages("lubridate")
# package ‘generics’ successfully unpacked and MD5 sums checked
# package ‘lubridate’ successfully unpacked and MD5 sums checked
library(lubridate)
x_d <- as.POSIXct("2019-12-31")
x_d               # [1] "2019-12-31 KST"
class(x_d)       # [1] "POSIXct" "POSIXt"
year(x_d)       # 2019 연도를 추출
month(x_d)    # 12 월을 추출
day(x_d)        # 31  일을 추출
quarter(x_d)   # 4  분기별 추출

 

SAS : 문자-> 순자, 문자 -> 날짜

* INPUT 함수;

DaTA a1;

x='31';            

y=input(x, 5.);        # 문자 x를 숫자 y로 바꾸기

PROC PRINT;

run;

 

DaTA a1;

x='31';                  # 문자 x를 지정 

y=input(x, 5.);         # 문자 x를 숫자 y로 바꾸기

PROC PRINT;FORMAT y mmddyy.;   # 숫자 y를 날짜형으로 프린트하기

run;

 

DATA a1;

x='1960-01-01';             # 날짜형 같지만 (날짜 형태인) 문자

y=input(x, yymmdd10.);   # 날짜형 문자를 날짜로 읽어들임... 그래도 숫자로 들어들인 셈

PROC PRINT;FORMAT y mmddyy.; # 숫자 y를 날짜형으로 프린트하기

run;

SAS 날짜

/* (3) SAS Date 값 간격을 구하는 함수   */
num1=YRDIF(시작날짜, 종료날짜, basis)
num1=DATDIF(시작날짜, 종료날짜, basis)  /* SAS Date 날짜 간격을 구하는 함수 */
PROC PRINT;
RUN;               

 

DATE()
현재의 날짜를 SAS Date 값으로 리턴합니다.

DATETIME()
현재의 시간과 날짜를 계산합니다.

DAY(date)
SAS Date 값으로부터 그 달의 날짜를 계산합니다.

DHMS(date,hour,minute,second)
date,hour,minute,second로부터 SAS Datetime을 계산합니다.

                                                           

+ Recent posts