2017-03-29 13 views
1

SAS 코드에서 일부 날짜 빼기를 수행해야하지만 INTCK 함수가 작동하지 않을 것이라고 생각합니다. 일일 차이를 나타낼 수있는 답변이 필요합니다. 시간 : 분. 이 프로그램을 프로그래밍 할 수는 있지만 작업을 수행하기 위해 인식하지 못하는 형식이나 함수가있을 것 같습니다.intck 함수가 잘라내 기 때 SAS 날짜 빼기

날짜 1 = 01JAN2000 12시

날짜 2 = 02JAN2000 14시 반

= 1시 2분 30초 차이 (즉, 1 일, 2 시간 30 분)

예 :

이 경우 INTCK를 사용하면 일 또는 시간 단위로 유지해야하지만 위의 원하는 형식을 얻을 수 없습니다.

+1

의 차이는 초 차이를 나타냅니다. 사용자 정의 TIME 형식을 요구하는 것 같습니다. – Tom

+0

네, 맞을 것 같습니다. 시간과 분뿐만 아니라 일을 제공하는 SAS 문서에서 시간 형식을 찾을 수 없었습니다. 이 형식이 있습니까? – Bosley

답변

3

%n 지시문을 PICTURE 형식으로 사용할 수 있어야합니다.

proc format; 
picture pictdhmf 
    low-high='%0n:%0H:%0M'(datatype=time) 
; 
run; 

참고 TIME 데이터 유형을 사용해야합니다. 경고 : DBCS 지원을 사용하여 SAS를 실행할 때 (예 : Shift-JIS 인코딩 사용) 올바른 결과를 얻지 못합니다. 또는 0보다 적은 시간입니다. UTF-8 인코딩을 사용하는 경우에도 1 바이트 문자 세트를 사용할 때 음이 아닌 값에 대해 작동합니다.

대신에 함수를 작성할 수 있습니다.

proc fcmp outlib=work.func.func; 
function dhmf(c) $; 
    length f $ 10; 
    f=catx(':',datepart(abs(c)),put(timepart(abs(c)),tod5.)); 
    if c < 0 then f='-'||f ; 
    return (f); 
endsub; 
run; 
options cmplib=work.func; 

다음 함수를 호출하는 형식을 지정하십시오.

proc format; 
value dhmf(default=10) 
other=[dhmf()]; 
run; 

따라서 두 가지 방법을 모두 테스트하고 TIME 형식이 생성하는 값과 비교하면됩니다.

data _null_; 
    input (date1 date2) (:datetime24.) ; 
    diff = date2 - date1 ; 
    if _n_=1 then put 'RAW' @11 'TIME.' @20 'Function' @ 30 'Picture'; 
    put diff comma9. @11 diff time. @20 diff dhmf. @30 diff pictdhmf.-l ; 
cards ; 
01JAN2000:02:30 02JAN2000:03:45 
01JAN1960:08:00 01JAN1960:17:00 
01FEB2017:00:00 04FEB2017:06:23 
01FEB2015:00:00 04FEB2017:06:23 
04FEB2017:00:00 01FEB2017:06:23 
run; 

우리는 얻을 : 날짜 시간 값 사이의

RAW  TIME. Function Picture 
    90,900 25:15:00 1:01:15 1:01:15  
    32,400 9:00:00 0:09:00 0:09:00  
    282,180 78:23:00 3:06:23 3:06:23  
    63440580 17622:23 734:06:23 734:06:23 
    -236,220 -65:37 -2:17:37 -2:06:23 
+0

오,'% n'은'datatype = time'입니다 - 어디에서 문서화되어 있습니까 ?? – Joe

+0

필자는 문서 팀에 연락하여 해당 문서를 수정할 수 있는지 확인했습니다. 그 이유는 필자가 알고있는 것이 아니기 때문에 문서화 된 것이 아니기 때문입니다. – Joe

+0

고마워요! 나는 그림 형식에 대해 들어 본 적이 없었으므로 확실히 새로운 것을 배웠습니다. 하나의 질문. 귀하의 예를 보면, 마지막 행은 함수와 그림 형식의 결과가 11 시간 차이가 있기 때문에 그 이유를 이해할 수 없습니다. 설명 할 수 있니? – Bosley