[SAS 프로그래밍] TXT 데이터 다루기 (1)
안녕하세요^^
이번 시간에는 SAS에서 text(확장자 : .txt) 파일을 다루는 것을 주제로 살펴보도록 하겠습니다.
TXT 파일은 용량도 작고 사전에 설치 되어야 하는 프로그램이 필요하지 않아서 원시데이터파일을 저장할 때 많이 사용되곤 합니다.
먼저 txt 형태로 저장되어 있는 데이터를 SAS로 불러오는 방법에 대해 알아보겠습니다.
txt 파일로 저장되어 있는 3개의 예제 데이터는 숫자와 문자로 이루어진 데이터 입니다. 구분자는 쉼표로 되어있습니다.
▶ 하나의 txt 파일 불러오기
▷ 우선 하나의 txt 파일을 불러 오는 방법으로 PROC IMPORT를 사용하는 방법과 DATA STEP에서 INFILE문을 사용하여 불러오는 방법에 대해 알아보겠습니다.
▷ coding 1
DATAFILE= : 불러들여올 txt 파일이 있는 위치와 파일 이름, 확장자명을 입력합니다.
OUT= : 생성할 SAS data set 이름을 지정해 줍니다.
DBMS= 는 구분자를 입력하는 옵션으로,
여기서 사용된 예제 데이터에서는 구분자가 쉼표이기 때문에 DBMS=DLM으로 입력한 후, DELIMITER= 옵션에 쉼표를 입력하였습니다.
만약 원시 데이터가 탭(TAB)으로 구분되어 있다면 DBMS=TAB으로 설정할 수 있고,
이 외에 다른 문자로 구분되어 있다면 (예를 들어, 느낌표(!)와 같은 구분자)
DBMS=DLM ; DELIMITER=’!’ ; 와 같이 설정 가능합니다.
REPLACE 옵션은 덮어쓰기를 하기 위해 사용하였고,
GETNAMES= 옵션으로 원시 데이터에서 첫 행을 변수명으로 사용할 지 여부를 설정할 수 있습니다. 기본 설정값(default)은 GETNAMES=YES이고 해당 예제 데이터에서는 첫 행에 변수명이 입력되어 있지 않기 때문에 GETNAMES=NO 로 설정하였습니다.
▷ coding 2
이번에는 DATA step에서 INFILE 문을 사용하는 방법입니다.
INFILE에 파일 경로와 데이터 명, 확장자를 입력하고
DSD와 함께 DELIMITER= 옵션을 사용하여 구분자를 설정하며, 구분자 사이에 아무 값이 없는 경우에는 결측으로 처리합니다.
MISSOVER 옵션은 결측값이 있더라도 데이터를 끝까지 읽도록 하며,
LRECL 옵션으로 읽어들이는 값의 길이를 지정할 수 있습니다.
INFORMAT문으로 각 변수의 포맷을 설정하고
INPUT문에 데이터의 변수명을 입력하면 txt로 입력된 데이터를 SAS로 불러들여올 수 있습니다.
▶ 두 개 이상의 txt 파일 한번에 불러오기
▷ 이번에는 한번에 여러 개의 txt 파일을 불러들여오는 방법을 알아보겠습니다.
▷ coding
위에서 사용하였던 DATA STEP에서의 INFILE문을 사용하여 한번에 여러 개의 txt파일을 불러들일 수 있습니다.
이전에 사용하였던 코드와 다른점은,
불러오고자 하는 데이터의 저장 경로 및 파일명을 INFILE문에 지정하는 것 대신에 CARDS (DATALINES); 부분에 입력을 하는 것 입니다.
FLIEVAR= : 기존에 INFILE에 경로를 지정하던 것으로 인식하지 않고 새로 지정한 변수(save_location)의 경로로 인식하기 위해 사용합니다.
END= : 데이터가 마지막 레코드일 때 1로 설정이 되는데, 아래에서 변수명을 입력하기 위한 DO-WHILE문에서 마지막 데이터까지 반복이 되도록 지정하기 위해 사용합니다.
DELIMITER= : 구분자를 지정할 수 있습니다.
INPUT문에서 경로 및 파일명을 save_location으로 지정하고
INFORMAT문에서 문자 길이를 지정하여 줍니다.
변수명을 입력할 때 DO-WHILE(not readout) 대신에 DO-UNTIL(readout) 도 사용가능합니다.
이상으로 한 개 또는 여러 개의 txt파일을 SAS로 불러오는 방법에 대해 PROC IMPORT와 DATA STEP을 사용하여 알아보았습니다.
감사합니다^^
[Reference]
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.