2014-10-09 2 views
2

날짜와 시간을 기준으로 두 개의 데이터 세트를 병합하려고합니다.SAS가 날짜와 시간에 병합합니다.

두 세트 모두 날짜는 date9입니다. 형식이며 시간은 time5입니다. 체재.

다음과 같은 간단한 병합으로 충분하다고 생각했습니다.

나는 SAS가 날짜와 시간을 초 단위로 읽는다고 생각합니다.

data test; 
merge JRA_UK_July_spot (in=a) 
UK_surveys_30plus (in=b); 
by date time_num; 
if a and b; 
run; 

병합 된 테이블에 레코드가 없습니다.

참고 : 데이터 세트 WORK.JRA_UK_JULY_SPOT에서 읽은 관측치는 19517 개입니다. 참고 : 데이터 세트 WORK.UK_SURVEYS_30PLUS에서 읽은 관측치는 114235 회입니다. 참고 : WORK.TEST 데이터 세트에는 0 개의 관측 값과 14 개의 변수가 있습니다.

일치해야하는 레코드가 있다는 것을 알고 있습니다. 테이블 표 B

date  time_num 
01JUL2014 9:07 
01JUL2014 9:07 
01JUL2014 9:07 

에서

time_num date 
9:07  01JUL2014 
9:07  01JUL2014 

에서

은 날짜/시간이 저장되는 방식으로 함께 할 수있는 뭔가 될 수 있을까? 예를 들어 9:07이 9:07:34 일 수 있으며 9:07:11 일 수있는 다른 것과 일치하는 것이 아닙니다.

+0

무엇이 문제입니까? 예기치 않은 결과가 나거나 오류 메시지가 나타납니다. 아마도 샘플 데이터 및/또는 오류 메시지와 함께 문제의 일부 세부 정보가 어떤 응답에 집중하는 데 도움이됩니다. – Amir

+0

안녕하세요 Amir. 나는 당신의 제안에 따라 질문을 편집했습니다. 감사. –

+0

초에 대한 이론을 테스트하려면 몇 가지 시간 값을 로그에 표시하십시오 (예 : 'put time_num time.; '그러면 저장된 초가 표시됩니다. – Amir

답변

2

여기서 어려운 점은 시간이 단지 시간과 분으로 읽히지 않고 초로 읽혀지는 것입니다. 이것은 형식으로 표시되지 않더라도 마찬가지입니다.

이 문제를 해결하기 위해 round 함수를 사용하여 sas 시간을 가장 가까운 60 (즉, 가장 가까운 분)으로 반올림했습니다.

time_round=round(put(time_num, best12.), 60); 

나는 다음이 위의 병합 문제를 해결 하

(자정 예를 들어 5940에서 초 만에 sastime 인) time_round에 합병했다.

관련 문제