2014-02-25 3 views
1

SAS 코드를 작성하는 중입니다. SAS를 처음 접했을 때 (항상 R에서 일 해왔음) SAS에서 날짜 형식을 이해하는 데 문제가 있습니다.IF Else error in SAS

나는 SAS 데이터 세트 Sales_yyyymm을 가지고 있으며 사용자가 날짜 값을 입력하는 코드를 만들고 해당 날짜에 Sales 데이터가 있으면 1을 0으로 작성해야합니다. 현재이 코드 사용하고 - 내 SAS 데이터에 날짜 열을

%Let check_date = 20010120; 

Data A; 
    Set B; 
If date=&check_date then Date_Flag = 1; 
else Date_Flag = 0; 
run; 

날짜이다는 Sales_yyyymm을 설정하고 값을 20130129, 20110412, 20140120 등

처럼하지만이를 실행하는 경우 코드, 나는 모든 Date_Flag 값을 0으로 설정하십시오. IF 조건이 무시되고 있으며 어떻게 또는 왜 이런 일이 발생하는지 확신 할 수 없습니다.

아이디어가 있으십니까?

감사합니다.

+1

것으로 이해 정수이다. 'proc contents data = <당신의 데이터 셋>; 'date' 칼럼의 타입과 포맷을 출력하고 다시보고한다. –

+0

또 다른 것은 - SAS 날짜 리터럴은 "DDMMMYYYY"포맷이다. 사실'date' 컬럼이 실제로 날짜 타입 컬럼으로 저장되어 있다면 이것은 중요합니다. –

+0

방금 ​​확인한 결과'date' 열은 NUM 유형이고 Len 4와 YYMMDDN8 형식입니다. – RHelp

답변

3

Understanding How SAS Handles Dates 문서를 읽으면 SAS가 내부적으로 날짜를 저장하는 방법과 비교를 포함한 날짜 계산 방법이 수행됩니다.

SAS에서는 모든 날짜가 숫자 행의 고유 번호입니다. 년 1 월 1 일 이전의 날짜는 음수입니다. 1960 년 1 월 1 일 이후의 사람은 입니다. SAS 날짜 값은 숫자 변수이므로 을 쉽게 정렬하고 시간 간격을 결정하고 날짜를 상수로 사용하거나 SAS 함수에서 인수로 사용하거나 계산에서 사용할 수 있습니다.

의견에서 언급했듯이 "ddmmmyyyy"d 형식으로 날짜 리터럴을 지정해야합니다. SAS 날짜로 번역

%Let check_date = 20JAN2001; 

Data A; 
    Set B; 
If date="&check_date."d then Date_Flag = 1; 
else Date_Flag = 0; 
run; 

20010120

는 SAS가 처리 할 수있는 유효 범위를 넘어 :로

그래서, %Let check_date = 20010120;를 작성해야합니다. 예 : 2001012 - 끝에 0이 없다는 것을 유의하십시오. "03AUG7438"에 해당합니다. 예, 그게 7438입니다! 14995 반면

내가가`date` 컬럼 ​​YYYYMMDD 즉으로 표시하도록 포맷 가리키고 날짜이며, 날짜가 8digit 정수가 의심 SAS 날짜 20JAN2001

+0

고마워요! 도움이됩니다! :) – RHelp