BookmarkSubscribeRSS Feed

[SAS 활용 노하우] SAS basic Syntax 5

Started ‎08-28-2022 by
Modified ‎08-28-2022 by
Views 795

■ Controlling Input with Options in the INFILE Statement

이전 게시글을 통해서 INPUT 문을 사용하여 많은 다른 것들을 읽는 방법을 알아보았습니다.

raw data 파일을 읽을 때 SAS는 특정한 가정을 합니다. 

SAS는 첫 번째 데이터 라인으로 읽기를 시작하고 SAS 라인에서 데이터가 부족할 경우 자동으로 읽어 다음 줄로 이동하여 나머지 변수의 값을 읽습니다. 

INFILE 문의 다양한 옵션은 SAS가 원시 데이터 파일을 읽는 방법을 변경합니다. 

데이터 파일 유형 INFILE 문의 파일 이름 뒤에 이 옵션을 배치합니다.

 

 

*/ Ice-cream sales data for the summer*/
Flavor Location Boxes sold
Chocolate 213 123
Vanilla 213 512
Chocolate 415 242

 

다음 프로그램은 FIRSTOBS= 옵션을 사용하여 SAS가 세 번째에서 데이터 읽기를 시작하도록 지시합니다.

 

 

DATA icecream;
INFILE ’c:\MyRawData\Sales.dat’ FIRSTOBS = 3;
INPUT Flavor $ 1-9 Location BoxesSold;
RUN;

 

 

2) OBS = 

OBS= 옵션은 데이터 파일의 일부만 읽으려는 경우 사용할 수 있습니다.

Raw data파일의 해당 라인에 도달하면 SAS가 읽기를 중지하도록 지시합니다. 

예를 들어, 두 개의 원시 데이터를 읽는 경우에 각 관측치에 대한 데이터 라인을 읽고 싶다면, OBS=100은 100개의 데이터 라인을 읽을 것이고, 

그 결과 SAS 데이터 집합에는 관측치가 50개 있습니다. OBS= 옵션은 FIRSTOBS=와 함께 사용할 수 있습니다.

 

 

 

*/ Ice-cream sales data for the summer*/
Flavor Location Boxes sold
Chocolate 213 123
Vanilla 213 512
Chocolate 415 242

 

 

 FIRSTOBS=3 및 OBS=5를 사용하면 SAS가 세 번째 데이터 라인에서 이 파일 읽기를 시작하고 다섯 번째 데이터 라인에서 중지합니다.

 

 

DATA icecream;
INFILE ’c:\MyRawData\Sales.dat’ FIRSTOBS = 3 OBS=5;
INPUT Flavor $ 1-9 Location BoxesSold;
RUN;

 

 

 

 

3) MISSOVER 

기본적으로 SAS가 데이터 라인 끝에 도달했지만 INPUT 문에 값이 할당되지 않은 변수가 더 있는 경우에 다음 데이터 라인으로 이동하여 더 많은 데이터를 읽습니다. 

MISOVER 옵션은 데이터가 부족할 경우 다음 데이터 라인으로 이동하지 않도록 SAS에 알리는 옵션입니다. 대신 나머지 변수에 결측값을 할당합니다.

 

 

 

 

Nguyen 89 76 91 82
Ramos 67 72 80 76 86
Robbins 76 65 79

 

 

 

 

위의 예시 파일에는 자체 진행 과정에 대한 테스트 점수가 포함되어 있습니다. 

모든 학생들이 모든 시험을 끝내는 것은 아니기 때문에, 어떤 학생들은 다른 학생들보다 더 많은 점수를 받을 수 있습니다. 5개의 테스트 점수에 대한 데이터를 읽고 결측값을 할당합니다.

 

 

 

 

DATA class102;
INFILE ’c:\MyRawData\Scores.dat’ MISSOVER;
INPUT Name $ Test1 Test2 Test3 Test4 Test5;
RUN

 

 

 

 

 

4) TRUNCOVER

열을 사용하여 데이터를 읽을 때 TRUNCOVER 옵션이 필요합니다.

또는 형식화된 입력과 일부 데이터 라인이 다른 데이터 라인보다 짧을 때 사용할 수 있습니다. 

변수의 필드가 다음을 지나 확장되는 경우 데이터 라인의 끝, 그러면 기본적으로 SAS는 다음 라인으로 이동하여 변수의 값을 읽기 시작합니다.

이 옵션은 SAS가 데이터 라인의 끝에 도달할 때까지 변수에 대한 데이터를 읽도록 지시합니다.

또는 형식 또는 열 범위에서 지정된 마지막 열 중 먼저 오는 열을 선택합니다. 

 

 

 

John Garcia 114 Maple Ave.
Sylvia Chung 1302 Washington Drive
Martha Newton 45 S.E. 14th St.

 

 

 

주소를 포함하고 있으며 거리 이름이므로 열 또는 형식 입력을 사용하여 읽어야 합니다.

빈칸이 박히다 데이터 라인의 길이는 모두 다릅니다.

 

 

 

DATA homeaddress;
INFILE ’c:\MyRawData\Address.dat’ TRUNCOVER;
INPUT Name $ 1-15 Number 16-19 Street $ 22-37;
RUN;

 

 

 

 

 

이 프로그램은 열 입력을 사용하여 주소 파일을 읽습니다. 

주소 중 일부가 멈추기 때문에 가변 스트리트 필드(열 22~37)가 끝나기 전에 TRUNCOVER가 필요합니다.

TRUNCOVER 옵션이 없으면 SAS는 첫 번째와 세 번째 데이터로 이동하여 데이터를 읽으려고 합니다.

TRUNCOVER는 MISOVER와 유사합니다. 

데이터가 있을 경우 둘 다 결측값을 변수에 할당합니다.

라인은 변수의 필드가 시작되기 전에 끝납니다. 그러나 데이터 라인이 변수 중간에 끝나는 경우 TRUNCOVER는 거기에 있는 만큼의 양을 사용하는 반면, MISOVER는 변수에 a를 할당합니다.

■ Reading Delimited Files with the DATA Step

 

 

 

 

구분자가 있는 데이터는 특수 데이터 파일로 데이터 값을 다양한 구분자로 값을 구분하고 있습니다.

종종 쉼표 또는 탭 문자를 사용하여 구분된 파일로 데이터가 저장됩니다.

이러한 데이터 파일을 용이하게 읽기 위해서는 SAS는 INFILE에 대해 두 가지 옵션을 제공합니다.

1) The DLM = 

목록 입력을 사용하여 데이터를 읽는 경우 DATA 스텝은 파일을 읽습니다.

데이터 값 사이에 공백이 있어야 합니다. INFILE의 DLIMITER= 또는 DLM= 옵션

문을 사용하면 다른 구분 기호로 데이터 파일을 읽을 수 있습니다. 쉼표 및 탭 문자를 예로 들 수 있습니다.

또는 데이터 파일에 공통 구분 기호가 있지만 구분 기호가 있는 데이터 파일을 읽을 수 있습니다.

딜리미터 문자를 DLM= 옵션 뒤에 따옴표로 묶기만 하면 됩니다(예: DLM='&')

다음 파일은 여름 독서 프로그램에서 매주 읽은 책의 수를 학생들의 이름 뒤에 오는 쉼표로 구분합니다.

 

 

 

Grace,3,1,5,2,6
Martin,1,2,4,1,3
Scott,9,10,4,8,6

 

 

 

이 프로그램은 쉼표를 구분 기호로 지정하는 책 데이터 파일을 읽기 위해 DLM 옵션을 사용합니다.

 

 

 

DATA reading;
INFILE ’c:\MyRawData\Books.dat’ DLM = ’,’;
INPUT Name $ Week1 Week2 Week3 Week4 Week5;
RUN;

 

 

아래의 syntax 는 동일한 데이터에 쉼표 대신 값 사이에 탭 문자가 있는 경우 파일을 읽기 위한 프로그램입니다. 

이 프로그램은 DLM='09'X 옵션을 사용합니다. 

ASCII에서 09는 문자에 해당하는 16진수이며, 표기법 '09'X는 16진수 09를 의미합니다.

컴퓨터에서 ASCII 대신 EBCDIC(IBM 메인프레임)를 사용한 다음 DLM='05'X를 사용 할 수 있습니다.

 

 

 

DATA reading;
INFILE ’c:\MyRawData\Books.txt’ DLM = ’09’X;
INPUT Name $ Week1 Week2 Week3 Week4 Week5;
RUN;

 

 

 

 

2) The DSD option 

기본적으로 SAS는 연속된 두 개 이상의 구분 기호를 단일 구분 기호로 해석합니다. 파일이 있는 경우

누락된 값이 있고 행에 있는 두 개의 구분 기호가 누락된 값을 나타내는 경우 INFILE 문에 DSD 옵션도 필요합니다.

NFILE 문의 DSD(Delimiter-Sensitive Data) 옵션은 아래의 특징을 가지고 있습니다.

첫째, 따옴표로 묶인 데이터 값의 구분 기호를 무시합니다.

둘째, 데이터 값의 일부로 따옴표를 읽지 않습니다. 

셋째, 연속된 두 개의 구분 기호를 결측값으로 처리합니다. DSD 옵션은 구분 기호가 쉼표라고 가정합니다.

구분 기호가 쉼표가 아닌 경우 DSD 옵션과 함께 DLM= 옵션을 사용하여 구분 기호를 지정할 수 있습니다. 

예를 들어, 두 개의 연속 탭 문자로 표시되는 누락된 값이 있는 탭으로 구분된 ASCII 파일을 읽으려면 아래의 syntax를 사용할 수 있습니다.

 
 
INFILE ’file-specification’ DLM=’09’X DSD;

 

Version history
Last update:
‎08-28-2022 08:13 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags