SAS는 날짜를 숫자로 저장합니다. 실제로는 별개의 유형이 아닙니다. SAS 날짜는 1960 년 1 월 1 일 이후의 일 수로, 오늘은 19000 년 조금 넘습니다. 날짜 형식은 날짜 계산과 전혀 관련이 없습니다. 이는 사람이 읽을 수있는 용도로만 사용됩니다.
당신이 말하는 비트 :
"&sysdate9"d
실제로 숫자 값 (18304)에 문자열 "01JAN2012"를 변환합니다.
실제로 수행하려는 작업을 수행하는 데 더 빠른 방법이 있습니다. 날짜는 SAS의 정수와 일치하기 때문에 하루 만 증가 시키면 값에 하나를 더할 수 있습니다. 예를 들어
:
%let months_back=5;
data _null_;
m = intnx('month', today(), -&months_back - 2, 'begin');
m2 = intnx('day', m, 26, 'same');
m3 = intnx('month',"&sysdate9"d, -&months_back - 2)+26;
m2back = put(m2, yymmdd10.);
put m= date9. m2= yymmdd10. m3= yymmdd10.;
run;
M3는 다른이 아니라면 한 번에, (... '일')를 26 INTNX를 추가, 달 간격을 사용하여 전체 계산은 기본적으로 무의미하지 값을 함수를 사용하여 (예 : 이동 색인 사용).
여기에 PUT (로그) 문 형식의 사용을 볼 수도 있습니다. 문자 값으로 PUT 할 필요가 없으며 형식 값을 가져 오기 위해 로그에 넣지 않아도됩니다. var) (형식.); - 그리고 원하는만큼 많이 끈을 묶어 라.
또한 "& sysdate9."d는 현재 날짜를 가져 오는 가장 좋은 방법은 아닙니다. & sysdate. SAS의 시작시에만 정의되므로 세션이 3 일 동안 실행 되었다면 현재 날짜가되지 않습니다 (아마도 원하는 것일까요?). 대신, TODAY() 함수는 SAS 세션이 실행 된 시간에 관계없이 최신 날짜를 가져옵니다.
마지막으로 - 데이터 세트를 원하지 않으면 결과 데이터 세트의 이름을 지정하고을 권장합니다. data _null_
은 데이터 집합을 만들지 않습니다. 데이터; 작업 공간을 빠르게 채우고 자신이하는 일을 말하기가 어려워지는 데이터 세트 (data1, data2, ...)가 점점 더 많이 생성됩니다.
출처
2012-12-04 16:07:43
Joe
감사합니다. 예, 두 번째 인수는 숫자 여야하며 m은 이미 숫자 유형입니다. "01OCT2022"와 같은 인수는 자동으로 숫자 유형으로 변환됩니다. put (m, date9.)는 데코레이터 'd'가없는 char 값을 반환하고 SAS는이를 변환하는 방법을 알지 못합니다. – bopie