2012-11-30 9 views
2

다음과 같은 .txt 형식입니다.SAS를 사용하여 텍스트에서 날짜 및 시간을 추출하십시오.

'임의 제목'

임의 일, 오전 12시 년 1 월 1 일

2005, 555 개 단어 (영어)

'임의 긴 제목을'

임의 00:00 AM, 2005 년 1 월 1 일 111 단어,

시간 및 날짜는 yyyymmdd 및 hhmm 형식으로 추출해야합니다. 구분 기호로 쉼표를 사용하려고했습니다.

DATA News; 
    INFILE 'C:xxxx/xxxx/xxxx' DLM','; 
    INPUT Title $75. Time $10. Date $20. Words $15. Lang $10.; 
PROC PRINT DATA=News; 
    TITLE 'Time and Date'; 
    VAR Time Date; 
RUN; 

하지만 실패한 항목에는 여러 줄이 포함되어 있으며 형식이 올바르지 않습니다.

해결책이 있습니까?

+0

무엇을 시도 했습니까? http://mattgemmell.com/2008/12/08/what-have-you-tried/ – durron597

+0

당신이하려는 일에 더 많은 배경 정보를 제공하면 도움이 될 것입니다. 구조화되지 않은 텍스트에서 날짜와 시간을 추출해야하는 것처럼 들립니다. SAS는이를위한 최상의 도구가 아닐 수도 있습니다. 솔루션이 완전히 SAS인지 아니면 SAS가 최종 출력인지 여부만으로 충분합니까? SAS 입력 및 스캔을 살펴볼 수 있습니다. –

+0

질문이 전혀 명확하지 않습니다. 어떤 것을 시도했는지, 그리고 예상되는 결과를 보여주십시오. – BellevueBob

답변

1

날짜가 항상 같은 포맷하는 경우 : 오전 12시,

2005 1월 1일 그럼 당신은 그들을 찾을 펄 정규 표현식을 사용할 수 있습니다.

data test; 
input @; 
_prx = prxparse('/\d\d:\d\d (?:AM|PM), \d{1,2} (?:January|February|March) \d{4}/'); 
start = 1; 
stop = length(_infile_); 
call prxnext(_prx, start, stop, _infile_, position, length); 
    do while (position > 0); 
     found = substr(_infile_, position, length); 
     put found= position= length=; 
     call prxnext(_prx, start, stop, _infile_, position, length); 
    end; 
datalines; 
'random title' 
random things , 00:00 AM, 1 January 
2005, 555 words, (English) 
'random long title' 
random things , 00:00 AM, 1 January 2005, 111 words, 
(English) 
;;;; 
run; 

그런 다음 SAS 문자 변수에 일반적으로있는 것처럼 FOUND 값을 사용하여 날짜 및 시간 또는 날짜/시간 정보를 얻습니다. 분명히 모든 12 개월을 포함하도록 내 짧은 목록을 연장하십시오.

두 번째 예제를 찾았지 만 첫 번째 예제는 찾지 못합니다 (예제에서는 데이터 라인을 사용하여 합리적으로 찾을 수 없습니다). 그러나 데이터 라인을 사용하지 않고 텍스트 파일을 사용하는 경우 라인 피드와 캐리지 리턴을 제거하기 위해 레코드 형식을 조작 할 수 있으므로 두 레코드를 단일 레코드 (따라서 일치)로 볼 수 있습니다. 자세한 내용은 RECFM=N을 참조하십시오.

+0

고마워요,하지만 몇 가지 이유로 작동하지 않습니다 –

+0

@FredNg 귀하는 귀하의 질문을 편집하고 Joe의 코드를 시도한 결과를 설명하겠습니까? –

관련 문제