날짜다루기는 자주 있는 작업이 아니라도 다시 쓰려고 하면 기억이 가물 가물
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을 계산합니다.
'R연습 200제 > 07_00. (R)날짜&문자다루기' 카테고리의 다른 글
(R)제8강 8.4 정규표현식(이메일 체크 추가 ^^^ ) (0) | 2020.10.22 |
---|---|
8.7 문자열 다루기(일단 SAS) (0) | 2020.08.12 |
8.2 날짜형 관련 FORMAT 문의 여러가지 형태(SAS 경우) (0) | 2020.08.12 |