포스팅 목차
o INPUT 구문, 변수 이름 지정 입력 방식
1. 목 적
INPUT 구문, 변수 이름 지정 입력 방식은 “변수이름 = “ 뒤에 존재하는 데이터 값을 읽어서 해당 SAS 변수에 할당한다.
2. 문 법
INPUT <pointer-control> variable= <$> <@ | @@>; INPUT <pointer-control> variable= informat. <@ | @@>; INPUT variable= <$> start-column< -end-column> < .decimals> <@ | @@>; |
1) Pointer-control
입력 버퍼 내부에서 지정된 라인 또는 열로 입력 포인터를 이동한다.
필요사항 : | INPUT 구문의 “열 포인터 조절자” 와 “행 포인터 조절자” |
2) Variable=
INPUT 구문으로 읽기 위한 값을 포함하고 있는 변수를 지정한다. 입력 데이터 레코드에서 필드는 다음 형태로 존재한다.
- variable=value
주요기능 : | 예제 3 : 변수이름 지정입력 방식과 다른 입력 방식을 함께 사용하기 |
3) $
변수의 값이 문자 값으로 저장되도록 지정한다.
Tip : | 이전에 변수가 문자로 정의되었으면, $를 지정 할 필요가 없다. |
주요기능 : | 예제 3 : 변수이름 지정입력 방식과 다른 입력 방식을 함께 사용하기 |
4) Informat.
입력 형식을 지정한다. Informat은 입력값의 데이터 유형을 표시하며, 변수에 대한 상세한 입력 형식 지정하기 위하여 INFORMAT 구문을 사용하라.
Tip : | 변수에 대한 상세한 입력형식 지정하기 위하여 INFORMAT 구문을 사용하라. |
주요기능 : | 예제 3 : 변수이름 지정입력 방식과 다른 입력 방식을 함께 사용하기 |
5) Start-column
INPUT 구문이 입력 데이터 레코드에서 “variable=” 값에 대한 검색을 시작하기 위한 열을 지정한다. 변수 이름(“variable=”)은 이 위치에서 시작될 필요는 없다.
6) -end-column
변수의 기본 길이를 정의한다.
7) @
데이터 스텝의 동일 반복 내에서 다음 차례의 INPUT 구문의 실행을 위하여 입력 레코드를 유지한다. 이 행 고정 지정자(line-hold specifier)는 후행@라 불린다. 후행@는 다음 차례의 INPUT 구문이 자동으로 현재 입력 레코드에 대한 고정을 해제하고 다음 차례의 레코드를 입력 버퍼로 읽는 것을 제한한다. 동일한 레코드를 여러 번 읽을 필요가 있는 경우에 유용하다.
제한사항 : | 후행@는 INPUT 구문에서 마지막 항목으로 지정해야 한다. |
Tip : | 후행@는 이후의 INPUT 구문이 자동적으로 현재 입력 레코드를 해제하고 다음 차례의 레코드를 입력 버퍼로 읽는 것을 방지한다. 동일한 레코드를 여러 번 읽을 필요가 있는 경우에 유용하다. |
참고 : | INPUT 구문에서 “행고정 지정자 사용하기” |
8) @@
데이터 스텝의 반복수행과정 중에서 다음 반복 과정의 INPUT 구문 실행을 위하여 현재 입력 레코드를 유지한다. 이 행고정지정자(line-hold specifier)를 이중 후행@라고 한다. 개별 입력 라인에 다수의 관측치 값을 소유하고 있는 경우에 유용하다.
제한사항 : | 후행@는 INPUT 구문에서 마지막 항목으로 지정해야 한다. |
Tip : | 이중 후행 @은 개별 입력 라인이 다수의 관측치 값을 소유하고 있는 경우에 유용하다. |
참고 : | INPUT 구문에서 “행고정 지정자 사용하기” |
3. 범 주
SAS 기본 구문 (파일 처리 구문)
4. 상세 설명
변수이름 지정입력 방식 사용 시기
변수이름 지정입력 방식은 “변수이름 = 변수 값” 형식으로 구성된 입력 데이터 레코드를 읽는다. INPUT 구문에서 입력 포인터는 “변수이름 =”의 위치를 찾아서 입력 데이터 레코드를 읽는다.
레코드의 앞부분에 존재하는 입력 데이터 레코드가 INPUT 구문에 지정된 변수이름 지정입력 방식을 사용하여 읽을 수 없으면, 다른 입력 방식을 사용하여 앞부분의 입력 데이터를 읽을 수 있다. 그러나, INPUT 구문이 변수이름 지정입력 방식을 사용하여서 데이터를 읽기 시작하면 이후의 데이터 값들은 모두 변수이름 지정입력 방식을 사용해야 한다. “예제 3 : 변수이름 지정입력 방식과 다른 입력 방식을 함께 사용하기”를 참조하라.
데이터 레코드에서 값이 존재하는 순서로 INPUT 구문에서 변수를 지정할 필요는 없다. 그리고, 레코드에서 개별 필드에 대한 변수를 모두 지정할 필요는 없다. 그러나, 값이 입력 레코드에 존재 한 상태에서 다른 문장(예를 들어, ATTRIB, FORMAT, INFORMAT, LENGTH 구문) 에 사용되는 변수를 INPUT 구문에서 지정하지 않으면, INPUT 구문은 자동적으로 데이터 값을 읽는다. 그러나, 변수가 초기화되지 않았다는 내용을 로그에 작성한다.
모든 변수이름 지정입력 데이터를 INPUT 구문에서 변수로 모두 지정하지 않으면, _ERROR_를 1로 설정하고, 로그에 Note를 작성한다.
data list;
input name=$ age=;
datalines;
name=John age=34 gender=M
;
GENDER 변수가 INPUT 구문에 정의 되지 않았기 때문에 _ERROR_가 1로 설정되었다는 내용을 로그에 작성한다.
제한사항
- 변수이름 지정입력 방식으로 데이터를 읽기 시작한 이후에 다른 입력 방식과 포인터 조절자를 사용 할 수 없다. 이후의 나머지 데이터는 변수이름 지정입력(variable=value) 방식으로 읽어야 한다. 변수이름 지정입력 방식으로 존재하지 않는 값은 유효하지 않은 데이터로 처리한다.
- 현재 입력 라인의 끝 이후 다음 라인에 변수이름 지정입력 데이터 값이 계속 존재하면, 입력 데이터 라인의 마지막에 슬래쉬(/)를 사용하라. 슬래쉬 부호는 포인터를 다음 라인으로 이동시켜서 계속 데이터를 읽는다. 예를 들어, 다음 INPUT 구문은
input name=$ age=;
다음 입력 데이터 레코드를 읽을 수 있다.
name=John / age=34 |
- 변수이름 지정입력 방식을 사용하여 공백을 포함하는 데이터 값을 읽기 위해서, 목록 입력과 동일하게 데이터 값 앞뒤로 2개의 공백을 삽입하라. “예제 4 : 공백을 포함하는 문자형 변수 읽기”를 참고하라.
- 별표 또는 표현식 첨자를 사용하여 배열을 참조 할 수 없다.
5. 관련 구문
함수명 | 함수내용 |
ARRAY 구문 | 배열에서 사용하기 위한 배열 원소를 정의한다. |
ATTRIB 구문 | ATTRIB 구문을 사용하여 여러 변수에 대한 출력 형식(format), 입력 형식(informat), 라벨(Label), 길이(Length) 등을 한 번에 처리할 수 있다. |
FORMAT 구문 | 변수에 영구적으로 출력 형식(format)을 지정하여서 SAS 데이터 세트의 기술정보 (Descriptor information)를 수정한다. |
INFILE 구문 | INPUT 구문을 사용하여 읽기 위한 외부 파일을 지정한다. |
INFORMAT 구문 | 변수에 영구적으로 입력 형식(Informat)을 지정한다. |
INPUT 구문 | 입력 데이터 레코드에서 관측치 값을 변수로 읽으려는 방법을 정의하고, 입력값을 해당 SAS 변수에 할당한다. 외부 파일 또는 내부 데이터에서 원시 데이터를 읽기 위하여 INPUT 구문을 사용한다. |
INPUT 구문, 열입력 방식 | 지정된 열에서 입력 값을 읽어서 대응되는 SAS 변수에 값을 할당한다. |
INPUT 구문, 입력형식 지정 입력 방식 | 지정된 입력 형식(Informat)으로 입력값을 읽어서 해당하는 SAS 변수에 할당한다. |
INPUT 구문(목록 입력방식) | 입력 데이터를 검색하여서 해당하는 SAS 변수에 할당한다. |
INPUT 구문, 변수 이름 지정 입력 방식 | “변수이름 = “ 뒤에 존재하는 데이터 값을 읽어서 해당 SAS 변수에 할당한다. |
LABEL 구문 | 변수에 대한 설명 레이블을 지정한다. |
LENGTH 구문 | 변수를 저장하기 위하여 사용되는 변수의 길이(byte의 수)를 지정한다. |
6. 예 제
예제1 : 목록 입력 방식과 변수이름 지정입력 방식 사용하기
다음 데이터 스텝은 데이터 레코드를 읽기 위하여 목록 입력 방식과 변수이름 지정입력 방식을 사용한다.
SAS Statements |
data list;
length name $ 20 gender $ 1;
informat dob ddmmyy8.;
input id name= gender= age= dob=;
datalines;
4798 name=COLIN gender=m age=23 dob=16/02/75
2653 name=MICHELE gender=f age=46 dob=17/02/73
;
proc print data=list; run;
INPUT 구문은 ID변수를 목록 입력 방식을 사용하여 읽고, 나머지 NAME, GENDER, AGE, DOB 변수를 변수이름 지정입력 방식으로 읽는다. LENGTH 구문을 사용하여 데이터 값을 8자리로 자르지 않고 모두 읽도록 한다.
예제2 : 임의의 순서로 배치되어 있는 변수이름 지정입력 방식을 사용하여 변수 읽기
위의 예제와 동일한 데이터를 사용하는 다음 데이터 스텝은 입력 데이터 레코드를 읽기 위하여 목록 입력 방식과 변수이름 지정입력 방식을 사용한다. 그러나, 데이터의2개 행에서 값의 순서는 서로 다르다.
SAS Statements |
data list;
length name $ 20 gender $ 1;
informat dob ddmmyy8.;
input id dob= name= age= gender=;
datalines;
4798 gender=m name=COLIN age=23 dob=16/02/75
2653 name=MICHELE dob=17/02/73 age=46 gender=f
;
proc print data=list; run;
예제3 : 변수이름 지정입력 방식과 다른 입력 방식을 함께 사용하기
다음 데이터 스텝은 입력 데이터 레코드를 읽기 위하여 목록 입력 방식과 변수이름 지정입력 방식을 사용한다.
SAS Statements |
data list;
input id name=$20. gender=$;
informat dob ddmmyy8.;
datalines;
4798 gender=m name=COLIN age=23 dob=16/02/75
2653 name=MICHELE age=46 gender=f
;
proc print data=list;
run;
INPUT 구문은 처음 ID 변수를 읽기 위하여 목록 입력 방식을 사용한다. 나머지 NAME, GENDER, DOB변수는 변수이름 지정 입력 방식으로 읽는다. 이 변수들은 데이터 값을 순서대로 읽지 않는다. NAME=에 지정된 $20. 입력형식은 문자 데이터를 8자리 길이로 자르지 않고 모두 읽도록 한다. INFORMAT 구문에 DOB변수가 지정되었기 때문에 INPUT 구문은 DOB= 필드를 읽는다. 그러나, AGE= 필드는 INPUT 구문에서 지정되지 않았다. 그러나, SAS는 DOB 변수가 초기화 되지 않은 것과 AGE 변수가 정의되지 않은 내용을 로그에 작성하고, _ERROR_을 1로 설정한다.
예제4 : 공백을 포함하는 문자형 변수 읽기
다음 데이터 스텝은 변수이름 지정입력 방식으로 공백이 포함된 문자형 변수를 읽는다.
SAS Statements |
data list2;
informat header $30. name $15.;
input header= name=;
datalines;
header= age=60 AND UP name=PHILIP
;
HEADER변수의 값(“AGE=60 AND UP”) 앞뒤에는 2개의 공백이 존재한다.
[SAS Statement] SAS 데이터 스텝 구문 사전 목록] |
SAS 함수(SAS Function) 리스트 링크 |
'SAS > SAS 구문사전' 카테고리의 다른 글
【SAS Statement】 LABEL 구문 (0) | 2022.02.02 |
---|---|
【SAS Statement】 KEEP 구문 (0) | 2022.02.02 |
【SAS Statement】 INPUT 구문, 목록(List) 입력방식 (0) | 2022.02.02 |
【SAS Statement】 INPUT 구문, 입력형식 지정 입력방식(포맷 지정 입력형식) (0) | 2022.02.02 |
【SAS Statement】 INPUT 구문, Column (열입력방식) (0) | 2022.02.01 |
댓글