BookmarkSubscribeRSS Feed

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

Started ‎08-28-2022 by
Modified ‎08-28-2022 by
Views 1,457

데이터가 Raw Data File로 텍스트, ASCII문자 , 연속적인 숫자 또는 플랫 파일일 경우에는 데이터를 읽기 위한 DATA Step을 사용합니다.

Raw Data를 읽기 위한 첫 번째 단계는 파일이 위치를 명시하여 SAS에 원시 데이터를 찾는 위치를 알려주어야 합니다.

Raw Data는 SAS의 내부 데이터, 프로그램 또는 별도의 파일에 있을 수도 있습니다. 어떠한 데이터든 SAS에 데이터를 찾을 수 있는 위치를 알려줘야 합니다.

Raw Data 파일은 간단한 텍스트 편집기나 시스템 명령을 사용하여 볼 수 있습니다. 

■ Internal Raw Data

SAS 프로그램에 원시 데이터를 직접 입력하면 데이터가 프로그램 내부에 있습니다. 

소량의 데이터가 있는 경우 이 작업을 수행할 수 있습니다.

작은 테스트 데이터 세트로 프로그램을 테스트할 때, DATALINES 문을 사용하여 내부 데이터를 . DATALINES 문은 DATA 단계의 마지막 문이어야 합니다.

DATALINES 문 다음에 나오는 SAS 프로그램의 모든 행은 SAS가 세미콜론으로 종료됩니다. 세미콜론은 단독으로 또는 SAS 문 끝에 올 수 있습니다.

CARDS 문과 DATALINES 문은 동일합니다.

아래의 예시는 SAS 프로그램은 DATALINES 문의 사용을 보여줍니다. 

SAS에게 USPRESIDENTS라는 SAS 데이터 세트를 생성하도록 지시하고 INPUT 문은 SAS에게 지시합니다.

 
 
/* Read internal data into SAS data set uspresidents; */
DATA uspresidents;
INPUT President $ Party $ Number;
DATALINES;
Adams F 2
Lincoln R 16
Grant R 18
Kennedy D 35
;
RUN;
 
 

■ External raw data files

일반적으로 프로그램에서 데이터를 분리하여 외부 파일에 데이터를 보관할 수 있습니다.

이렇게 하면 SAS 프로그램을 편집할 때 데이터가 실수로 변경될 가능성이 사라집니다.

INFILE 문을 사용하여 해당하는 경우 데이터를 포함하는 외부 파일의 파일 이름과 경로를 SAS에 알려줍니다.

INFILE 문은 DATA 문 다음에 오고 INPUT 문 앞에 와야 합니다. INFILE 키워드 뒤에는 파일 경로와 이름이 따옴표로 묶여 있습니다.

다음은 여러 운영 환경의 예입니다.

  • Windows: INFILE ’c:\MyDir\President.dat’;

  • UNIX: INFILE ’/home/mydir/president.dat’;

  • OpenVMS: INFILE ’[username.mydir]president.dat’;

  • OS/390 or z/OS: INFILE ’MYID.PRESIDEN.DAT’;

다음 데이터가 MyRawData 디렉토리의 President.dat 파일에 있다고 가정합니다.

Adams F 2

Lincoln R 16

Grant R 18

Kennedy D 35

아래의 코드는 INFILE 문을 사용하여 외부 데이터 파일을 읽는 방법을 보여줍니다.

 
 
/* Read data from external file into SAS data set; */
DATA uspresidents;
INFILE ’c:\MyRawData\President.dat’;
INPUT President $ Party $ Number;
RUN;
 
 

■ The SAS LOG

외부 파일에서 데이터를 읽을 때마다 SAS는 SAS 로그로 파일에 대한 중요한 정보를 제공합니다.

파일을 읽은 후에는 문제를 나타낼 수 있으므로 항상 이 정보를 확인할 수 잇습니다. 파일로부터 읽은 레코드 수와 SAS 데이터 세트의 관찰 수를 단순하게 비교하면 SAS가 데이터를 읽고 있는지 여부에 대해 많은 것을 알 수 있습니다.

■ Long records

일부 운영 환경에서 SAS는 외부 파일의 레코드 길이가 256 이하인 것으로 가정하려고 합니다. (레코드 길이는 데이터 라인의 공백을 포함한 문자 수입니다.)

 
 
INFILE ’c:\MyRawData\President.dat’ LRECL=2000;
 
 

데이터 행이 길고 SAS가 모든 데이터를 읽지 않는 것처럼 보이면 INFILE 문에서 LRECL= 옵션을 사용하여 최소한 데이터 파일에서 가장 긴 레코드만큼 긴 레코드 길이를 지정할 수 있습니다.

■ Reading Raw Data Separated by Spaces

Raw Data File 값이 모두 하나 이상의 공백으로 구분된 경우 목록 입력(자유 형식 입력이라고도 함)을 사용하여 데이터를 읽을 수 있습니다.

목록 입력은 원시 데이터를 SAS로 쉽게 읽을 수 있는 방법이지만 몇 가지 제한 사항이 있습니다.

원하지 않는 값을 건너뛰지 않고 레코드의 모든 데이터를 읽어야 합니다.

누락된 데이터는 마침표로 표시하고 문자 데이터가 있는 경우 단순해야 합니다. 공백이 포함되지 않고 길이가 8자를 초과하는 값이 없어야 합니다.

DATA 단계의 일부인 INPUT 문은 SAS에 원시 데이터를 읽는 방법을 알려줍니다.

목록 입력을 사용하여 INPUT 문을 작성하려면 데이터 파일에 나타나는 순서대로 INPUT 키워드 뒤에 변수 이름을 나열하기만 하면 됩니다.

일반적으로 변수 이름은 32자 이하여야 하고 문자 또는 밑줄로 시작하고 문자, 밑줄 또는 숫자만 포함해야 합니다.

값이 숫자가 아닌 문자인 경우 변수 이름 뒤에 달러 기호($)를 배치합니다.

이름 사이에 하나 이상의 공백을 남기고 문장 끝에 세미콜론을 넣어야 합니다.

아래는 간단한 목록 스타일 INPUT 문의 예입니다.

 
 
INPUT Name $ Age Height;
 
 

위의 예시는 SAS가 세 가지 데이터 값을 읽도록 지시합니다.

Name 뒤의 $는 이것이 문자 변수임을 나타내고 Age 및 Height 변수는 모두 숫자입니다.

지역 마이너리그 야구팀인 Walla Walla Sweets가 매점 판매에 대한 기록을 보관하고 있습니다.

야구장에서는 양파링을 팔고 있는데, 구장 소유주는 안타와 실점이 많은 게임에서 매점보다 관람석에서 더 많은 양파 링이 판매된다는 느낌을 받습니다.

아래의 데이터는 각 홈 게임에 대해 다음 정보가 있습니다. 상대 팀 이름, 매점 및 관람석 양파링 판매, 팀별 안타수,각 팀의 최종 점수로 이루어져 있습니다.

 
 
DATA sales;
INFILE ’c:\MyRawData\Onions.dat’;
INPUT VisitingTeam $ 1-20 ConcessionSales 21-24 BleacherSales 25-28
OurHits 29-31 TheirHits 32-34 OurRuns 35-37 TheirRuns 38-40;
* Print the data to make sure the file was read correctly;
PROC PRINT DATA = sales;
TITLE ’SAS Data Set Sales’;
RUN;
 
 

VisitingTeam 변수는 문자($로 표시)이며 열 1에서 20까지 방문 팀의 이름을 읽습니다.

ConcessionSales 및 BleacherSales 변수는 각각 21~24열과 25~28열의 양보 및 관람석 판매를 읽습니다.

홈 팀인 OurHits와 방문 팀인 OurHits의 안타 수는 각각 29~31열과 32~34열에서 읽습니다.

홈 팀인 OurRuns의 런 수는 35~37열에 표시되고 방문 팀인 TheRuns의 런 수는 38~40열에 표시됩니다.

■ Reading Raw Data Not in Standard Format

Raw Data 가 숫자나 문자가 아닐 수 있습니다.

예를 들어, 우리 인간은 숫자 1,000,001을 100만 1로 쉽게 읽지만 컴퓨터는 문자열로 인식합니다.

포함된 쉼표를 사용하면 숫자를 더 쉽게 해석할 수 있지만 일부 지침 없이는 컴퓨터에서 숫자를 인식할 수 없습니다.

SAS에서 정보는 컴퓨터에 이러한 유형의 데이터를 해석하는 방법을 알려주는 데 사용됩니다.

Informats는 비표준 데이터가 있을 때마다 유용합니다. (표준 숫자 데이터에는 숫자, 소수점, 빼기 기호 및 과학적 표기법의 E만 포함됩니다.)

쉼표 또는 달러 기호가 포함된 숫자는 비표준 데이터의 예입니다. 다른 예에는 16진법 또는 팩 십진법 형식의 데이터가 포함됩니다.

SAS에는 이러한 유형의 데이터를 읽기 위한 정보도 있습니다.

Dates1은 아마도 가장 일반적인 비표준 데이터일 것입니다. 날짜 정보를 사용하여 SAS는 10-31-2003 또는 31OCT03과 같은 날짜 형식을 1960년 1월 1일 이후의 일수인 숫자로 변환합니다.

이것은 날짜로 계산할 때 매우 유용합니다. 예를 들어, 다른 날짜에서 하나를 빼서 두 날짜 사이의 일 수를 쉽게 찾을 수 있습니다. 형식에는 문자, 숫자 및 날짜의 세 가지 일반 유형이 있습니다.

 
 
 

Character

Numeric

Date

$informatw.

informatw.d

informatw.

 
 
 

$는 문자 정보, INFORMAT은 정보 이름, w는 전체 너비, d는 소수점 이하 자릿수입니다(숫자 정보만 해당).

마침표는 정보 이름에서 매우 중요한 부분으로 마침표가 없으면 SAS는 informat을 변수 이름으로 해석하려고 시도할 수 있습니다. 이 변수는 기본적으로 밑줄을 제외한 특수 문자를 포함할 수 없습니다.

표준 문자 데이터를 읽는 $w.와 표준 숫자 데이터를 읽는 w.d의 두 가지 정보 형식에는 이름이 없습니다.

INPUT 문에서 변수 이름 뒤에 informat을 배치하여 informats를 사용합니다. 이것을 형식화된 입력이라고 합니다. 다음 INPUT 문은 형식이 지정된 입력의 예입니다.

 
 
 
INPUT Name $10. Age 3. Height 5.1 BirthDate MMDDYY10.;
 
 

각 변수에 대해 읽는 열은 정보의 시작점과 너비에 따라 결정됩니다.

SAS는 항상 첫 번째 열로 시작합니다. 정보가 $10인 첫 번째 변수 Name의 데이터 값은 1~10열에 있습니다.

두 번째 변수의 시작점은 열 11이고 SAS는 열 11에서 13까지의 연령 값을 읽습니다.

세 번째 변수인 높이의 값은 14~18열에 있습니다.

다섯 개의 열에는 소수점 이하 자릿수와 소수점 자체가 포함됩니다. 마지막 변수 BirthDate의 값은 열 19에서 시작하며 날짜 형식입니다.

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

Catch up on SAS Innovate 2026

Nearly 200 sessions are now available on demand in the Innovate Hub.

Watch Now →
Article Labels
Article Tags