본문 바로가기
SAS

[SAS] sas에서 텍스트 파일 불러오기(infile문 이용, 에러 해결하기)

by SASBIGDATA김진휘 2014. 3. 5.

빅데이터(bigdata)를 다룰때 원시데이터가 엑셀(excel) 파일인 경우가 거의 없다.

이유는 엑셀 파일의 행(관측치)의 개수가 한계가 있기 때문이다.

엑셀 97-2003 통합문서인 경우 행은 총 65,536, 엑셀2007인 경우 행은 총 1,048,576

그렇기 때문에 텍스트 파일을 많이 가져오는 경우가 대부분이다.

 

sas를 이용해서 텍스트 파일을 가져오는 방법을 알아보자.

 

일반적으로 간단하게 가져오는 경우가 [파일]-[데이터 가져오기] 를 통하여 또는 proc import를 이용하여

텍스트 파일을 가져오는데 정상적으로 가져와진다면 문제가 없다.

 

하지만 많은 경우가 불러오는 도중 다양한 에러들이 생기는 경우가 많다.

에러를 해결하는 몇몇의 경우에 대해서 알아보자.

 

1. [파일]-[데이터가져오기]를 이용하여 텍스트를 가져와본다.

정상적으로 가져와진다면 문제가 없지만 에러들이 생길 경우가 있다. 그렇다면 infile 문을 이용해서 세부적인 코딩으로 수정을 하여 가져와야 하는데 복잡하고 긴 infile문을 언제 일일이 입력하고 있을 것인가? 한번에 해결하는 방법은

로그 창을 확인한다.

 

 

 

로그창을 확인하면 위와 같이 텍스트를 가져올 때 sas가 어떤 코딩으로 가져오는지 과정을 보여준다. 이것을 복사해서 확장편집기에 붙인다.

 

2. 로그 창에서 에러가 생긴 부분을 확인을 한다.

 

 

예제의 경우에 mix변수에 대해 에러들이 생겼다.

mix변수는 숫자 한자리로 구성되어 있으나 일부분 관측치들은 문자형 한자리로 있는 것들이 섞여 있다.

이 경우 sas데이터셋은 생성이 되지만 mix 변수의 수치값 데이터는 수치로 들어오지만 문자였던 값들이

수치형 결측치 . 로 변환되어 버린다.

 

3. 에러부분 해결하기

 

위에 로그창으로 보여준 infile 코딩을 보면 mix변수의 informat과 format을 보면 best12.로 수치형으로 인식하게 sas가 가져오도록 코딩이 되어있다. 하지만 mix변수에는 한자리수 수치형 값과 한자리 문자형 값이 섞여 있다.

그러므로 mix변수를 best12. 이 아닌 문자형 $1. 로 입력 변환 시킨다. 

 

 

4. 에러 부분 코딩 수정후 재실행 및 확인

에러가 생긴 원인을 찾아 코딩을 수정한 뒤 제대로 실행이 되는지 재실행하여 본다.

 

 

 

위 사진처럼 텍스트 파일을 가져오는데 에러가 생기지 않고 sas데이터셋으로 불러오기가 성공적으로 되었다.

과연 모든 값들이 제대로 불러온건지 확인을 해볼 필요가 있다.

 

5. 텍스트파일 데이터와 sas 결과창 비교하여 제대로 불러왔는지 확인작업하기.

 

 

 

전체적으로 텍스트 원데이터가 sas데이터셋에 제대로 불러와졌다. 하지만 id와 code라는 변수의 데이터 뒤를 보면 E22, E12처럼 십진수로 바뀐 것을 볼 수가 있다. 기존의 원 데이터 에서는 1자리 수까지 다 나타났으나 sas에서 best32.로 수치값으로 가져와 너무 값이 크기때문에 십진수 처리를 해버린 것이다. 이런 경우들이 발생 할 수 있기 때문에 꼭 기존의 텍스트 파일의 데이터와 sas 결과 데이터를 비교해 보아야 한다. 텍스트 파일 데이터 그대로 가져오기 위해 한번더 코딩 재수정을 실시한다.

 

6. 수치값이 자동 십진수로 변환되어 버린 데이터 원시데이터와 같게 수정해주기.

 

방법은 맨 처음 mix변수 수정과 동일하다. 원 데이터(텍스트 파일 데이터)의 십진수로 변환된 데이터들의 길이를 파악하고 거기에 맞게 입력해주는 것이다. 예제의 경우 id는 23자리이고, code는 13자리로 구성되어 있기 때문에 코딩에 변환을 주어 입력하였다. 그 후 실행을 하여 정상적으로 실행이 됬는지를 확인한다.

 

 

 

7. 결과 확인

 

 

십진수였던 데이터값이 끝까지 정확하게 원래값 그대로 가져온 것을 확인 할 수가 있다.

원 데이터인 텍스트 파일 데이터 형식 그대로 sas데이터셋으로 불러오기가 된 것을 확인 할 수가 있다.

 

 

sasbigdata.com 김진휘

 

 

댓글