2012-04-13 1 views
0

고정 열 너비가있는 일부 원시 데이터로 작업하고 있지만 모든 레코드가 한 줄로 기록됩니다 (데이터 공급 업체가 아닌 나에게 :-)). 나는 INPUT 문에서 고정 열 너비를 사용하는 방법과 행당 하나 이상의 관찰을 읽는 방법 @@을 사용하는 방법을 알고 있지만 둘 다 시도 할 때 문제가 있습니다.SAS DATA step/INPUT 문 : 열 기반 원시 데이터 및 단일 관측치의 여러 관측 값 읽기?

예를 들어 데이터의 열 너비가 고정되어 있지만 레코드 당 한 행이있는 코드가 있습니다. 현재 이곳에

DATA test_1; 
    INPUT alpha $ 1-5 beta $ 6-10 gamma 11-15 ; 

    DATALINES; 
a f 1 
ab fg 12 
abc fgh 123 
abcd fghi 1234 
abcdefghij12345 
    ; 
RUN; 

을 정말 할 노력하고있어 무엇에 대한 코드입니다 - 모든 데이터가 한 줄에 있고, 나는 @@ 표기법을 사용하려고 :이 코드는 잘 작동

DATA test_2; 
    INPUT alpha $ 1-5 beta $ 6-10 gamma 11-15 @@; 

    DATALINES; 
a f 1 ab fg 12 abc fgh 123 abcd fghi 1234 abcdefghij12345 
    ; 
RUN; 

을 이것은 처음 15자를 계속 읽고, 그 기록을 가지고 있고, 처음부터 다시 읽으므로 실패합니다. @@ 표기법의 의미에 대한 필자의 이해를 바탕으로 필자는 이것이 왜 일어날 지 이해할 수 있습니다.

고정 된 열 데이터를 한 줄에서 읽을 수있는 방법이 있습니까? 즉, test_2test_1과 동일한 내용을 갖고 있습니까? 아마도 INPUT 문에 기호를 조합하거나 다른 방법 (파일 I/O 기능, PROC IMPORT 등)을 사용하고있을 수 있습니까?

답변

2

정보를 사용하여 가변 길이를 지정해 보았습니까? 는 SAS 문서에서

DATA test_2; 
    INPUT alpha $5. beta $5. gamma 5.0 @@; 

    DATALINES; 
a f 1 ab fg 12 abc fgh 123 abcd fghi 1234 abcdefghij12345 
; 
RUN; 

: 예

포맷의 입력 변수의 값을 판독 칼럼 입력 의 그런 이동 포인터시킨다. 포인터는 informat에 지정된 길이를 이동하고 다음 열에서 중지합니다.

+1

니스 ... 내가 뭘하고 있었는지 확실하지 않지만 샘플 데이터에서 작동한다. –

+0

와우, 다양한 너비의 열을 사용하고 ':'표기법을 사용하는 데 익숙하다. ':'을 삭제하고 너비를 지정함으로써 절대 너비를 지정하는 것을 잊어 버렸습니다. 저는 지금이 대답을 받아들이고 있습니다. 그러나 나는 또한 당신이 저에게 말할 수 있기를 바랬습니다 : 왜 사람들이'alpha $ 5'라고 말할 수있을 때'alpha $ 1-5'라고 말합니까? 이전 표기법은 일종의 유산 지원입니까? 어쨌든 위대한 답변에 감사드립니다. –

+1

알파 $ 1-5와 알파 $ 5는 다른 일을합니다. 첫 번째 행은 현재 입력 행의 1-5 열에서 읽습니다 (원래 문제의 근본 원인 임). 두 번째는 현재 위치에서 NEXT 5자를 읽습니다. 그래서 다른 사람을 대신하지 않으며, 그들은 보완 적입니다. –