2016-07-21 4 views
0

큰 텍스트 파일을 가지고 있으며 3 개의 테이블이 있습니다. 파일의 레코드는 정렬되지 않고 파일의 레코드는 공백으로 구분 된 열 이름과 일치합니다. 테이블은 끝날 때까지 반복됩니다. 올바른 테이블 아래에있는 메모장 파일의 데이터를 SAS로 가져 오려고합니다. 나는 텍스트 파일에서 레코드와 열 이름을 읽고 SAS에서 올바른 테이블에 넣고 싶습니다. INFILE을 사용해 보았지만 SAS에 데이터를 성공적으로 가져 왔지만 Columns은 정렬되지 않았고 테이블 자체가 반복되므로 SAS의 올바른 테이블 아래에 레코드를 보관하는 것이 더 어렵습니다. SAS 초보자입니다. 도움을 주시면 대단히 감사하겠습니다. 당신은 당신이 보고서에 감지하는 논리를 갖고 싶어하는 보고서를 열람하는메모장 파일 (.txt)에서 분류되지 않은 데이터를 SaS로 가져 오기

ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                  

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 1                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 2                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxx             
Column2   x          Column4 xx 

    ABCD - ABCD   ----  Table 3                   

Column1   xxxxxxxxxxxxxxxxxxx      Column3 xxxxxxxxxxxxxxxxxxxx            
Column2   x          Column4 xx 
+0

원하는 결과물의 예를 제공해야합니다. 또한 파일의 어떤 부분을 데이터로 읽으 려하는지 명확히해야합니다. 변수 이름을 미리 알고 있습니까? – Tom

+0

정렬되지 않은 데이터가 포함 된 텍스트 파일을 가져 오려고합니다. 열에 대한 열과 데이터는 공백으로 구분 된 동일한 행에 있습니다. 약 100 개의 기둥이 있습니다. 테이블은 동일한 열 이름으로 반복되지만 파일의 끝까지 다른 데이터로 반복됩니다. 위의 예제는 입력 파일을 보여 주며 SAS에서 올바른 테이블 형식으로 출력해야합니다. –

+0

이 TXT 파일은 소프트웨어 시스템 덤프로 보입니다. 이 파일과 같은 데이터의 XML/JSON과 같은 다른 형식 유형이 트리 형식 구조를 약간 닮았습니까? – Parfait

답변

1

보통 때

아래는 텍스트 파일에서 데이터의 예입니다. 헤더 행의 값을 읽고 유지하려고합니다. 일반적으로 보고서 날짜, 보고서의 개인 또는 귀하의 경우와 같이 보고서 데이터의 출처가 포함될 수 있습니다.

data step1 ; 
    infile 'myfile.txt' truncover ; 
    input @; 
    * eliminate blank lines ; 
    if _infile_ = ' ' then delete; 
    * Read the TABLE name ; 
    if substr(_infile_,23,6) = ' ---- ' then do; 
    block+1; 
    input @33 table_name $32.; 
    retain table_name; 
    delete; 
    end; 
    else do; 
    * Read two values from each line ; 
    input @2 varname $20. value $50. @; 
    output; 
    input @59 varname $20. value $50. ; 
    output; 
    end; 
run; 

다음 단계를 추가하고 정렬 할 수 있습니다.

proc sort data=step1 out=step2; 
    by table_name block varname ; 
run; 
proc transpose data=step2 out=step3; 
    by table_name block; 
    id varname; 
    var value; 
run; 
+0

입력 @ 2 varname $ 20. 가치 $ 50. @; 출력; 왜이 "@"가 입력문의 끝에 필요합니까? 입력 문을 가리키고 있지 않을 때 왜 @가 필요한지 혼란 스럽습니다. – DukeLuke

+1

@는 SAS가 다음 INPUT 문에 대한 줄을 유지하도록 사용됩니다. 이렇게하면 보고서의 왼쪽 및 오른쪽 열을 모두 읽을 때 프로그램에서 동일한 변수 이름을 사용할 수 있습니다. 첫 번째 INPUT 문 뒤에 @가 붙은 것과 같은 이유가 있습니다. – Tom

+0

고맙습니다. 이것은 @@과 동일한 영향을 미칩니 까? – DukeLuke

관련 문제