본문 바로가기
데이터 사이언스 이야기/R & SAS Programming

[SAS Programming] 날짜 변수 속성(Type) 바꾸기 (Input, put, format)

by Data_to_Impact 2020. 9. 10.
반응형

[SAS Programming] 날짜 변수 속성(Type) 바꾸기 (Input, format)

[SAS Programming] 날짜 변수 속성(Type) 바꾸기 (Input, format)

임상시험 데이터들을 접하다가 보면 날짜와 관련 변수들을 다루어야 할 때가 많은데, 이 날짜 관련 데이터들은 SAS Date 변수이나 Character Type 으로 정의된 변수로 저장될때가 있다. 데이터마다 저장되는 방식이 일괄되지 않아서 변수의 정의 방식을 바꾸어야 할 필요가 생긴다. 

 

1) 다른 데이터 셋에서 Merge를 할때 두 변수의 속성들이 일치하지 않는 경우

2) 리포트를 할때 Character인 날짜 변수를 사용하여도 상관이 없겠지만, 어떤 질병의 지속기간을 구하기 위해서 두 날짜들을 빼는 연산을 해야 될 경우에는 (e.g., Duration=End Date - Start Date +1)  SAS Date Type으로 계산을 해야된다. 

 

본 포스팅에서는 Input과 Format을 이용해서 날짜 속성을 가진 변수를 Character Type을 가진 변수로, Character Type을  가진 변수를 날짜 속성으로 가진 변수로 바꾸는 방법을 예제를 통해서 설명할 것이다.  

 

  • Character Type의 변수를 날짜 타입으로 가진 변수로 전환하기

예제 데이터셋 "date"

 

data date;
	txt1="01DEC2020";
	txt2="09-08-2020";
	txt3="2020-10-14";
run;

 

 

위에 "date" 라고 정의된 데이터셋은 txt1, txt2 라는 변수를 포함하며, 이 변수들은 각기 다른 형태의 날짜 데이터를 Character Type으로 가지고 있다. 이 변수들을 SAS Date 변수로 바꾸려면 어떻게 해야할까?

 

Character Type으로 정의된 txt1-txt3 변수들

이때는 SAS Data Step의 Format Statement와 Input Function을 사용하면 된다. 

 

결과 데이터셋 "date2"

data date2;
	set date;
    
	format  char_to_date1 date9. 
    		char_to_date2 mmddyy10. 
            char_to_date3 yymmdd10.; 
            
	char_to_date1=input(txt1, date9.);
	char_to_date2=input(txt2, mmddyy10.);
	char_to_date3=input(txt3, yymmdd10.);
run;

 

1. Format Statement를 사용해서 새로 이용할 변수와 날짜 타입(date9., mmddyy10., yymmdd10.) 을 정의한다. 

2. Input function을 이용해서 삽입될 텍스트 변수와 그 변수의 형태를 맞추어서 함수에 적용한다. (예를 들어서 "01DEC2020" 형태는 Date9.의 형태이다)

 

변수 속성 변화의 결과. 변수가 SAS Date 변수로 바뀌었다.

 

 

  • 날짜 타입으로 가진 변수를 택스트 변수로 변환하기 

이번에는 반대로 날짜 타입을 가진 변수들을 텍스트 변수로 바꾸어 보려고 한다. 

 

예제 데이터셋 "date"(위의 예제와 다른 데이터 셋이니 헷갈리지 말자)

data date;
	format date1 date9. date2 mmddyy10. date3 yymmdd10.;
	date1=input("01DEC2020",date9.);
	date2=input("09-08-2020",mmddyy10.);
	date3=input("2020-10-14",yymmdd10.);
run;

 

예제 데이터셋 "date" 이번에는 원 변수들이 데이터 속성을 가지게 되었다.

 

data date2;
	set date;
    
	format txt1 txt2 txt3 $10.;
    
	txt1=put(date1,date9.);
	txt2=put(date2,mmddyy10.);
	txt3=put(date3,yymmdd10.);
run;

 

 

이번에도 마찬가지로 format으로 저장이 될 변수의 형태를 정의하는 점에서는 이번에는 input이 아니라 put을 사용해야한다. 

 

Input이 Character Type->Numerical Type(Date 속성을 포함)의 변환을 담당한다면,

Put은 Numerical Type(Date 속성 포함)->Character Type을 담당하기 때문이다. 

 

텍스트 변수로 바뀐 모습, txt2, txt3도 마찬가지로 텍스트 변수들로 바뀌었다.

 

여기서 format 뒤에 $ xx.부분은 본인이 길이를 바꿀 수 있고, format 대신에 length $ xx.를 사용해도 문제가 없다. 

 

 

 

글이 도움이 되셨다면 구독하트 부탁드립니다 !

반응형

댓글