포스팅 목차
o LOSTCARD 구문
1. 목 적
LOSTCARD 구문은 단일 관측치가 여러 레코드에 존재하는 데이터에 대한 입력 작업 수행 중에 결측치 또는 유효하지 않은 레코드를 만났을 때 입력 상태를 재동기화한다.
- 동기화 : 작업들 사이의 수행시기를 맞추는 것. 사건이 동시에 일어나거나, 일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 말한다.
2. 문 법
LOSTCARD; |
1) 인수 사용하지 않음
LOSTCARD 구문은 현재 그룹에 결측치 레코드가 포함되어 있을 때 다음 차례의 그룹에서 레코드 읽는 것을 중지시킨다.
3. 범 주
SAS 기본 구문 (실행 구문)
4. 상세 설명
LOSTCARD 사용 시기
SAS가 하나의 관측치를 생성하기 위하여 다중 레코드를 읽는 경우에 일반적으로 데이터의 끝에 도착 할 때까지 공백 레코드는 발견되지 않는다. 그러나, 데이터에 결측 레코드가 존재한다면, 데이터에서 그 이후의 관측값은 예상과 다르게 입력 처리 될 수 있다. 현재 그룹이 기대한 것 보다 더 적은 레코드를 가졌을 때, LOSTCARD 구문을 사용하여 다음 그룹에서 레코드 읽는 것을 중지시킨다.
입력 데이터가 관측치마다 고정된 레코드의 개수로 구성되어 있을 때와 관측치에 대한 개별 레코드가 동일한 값을 가지는 식별 변수를 포함하고 있을 때에 LOSTCARD가 유용하다. LOSTCARD 구문은 일반적으로 IF-THEN 구문의 THEN 절 또는 SELECT 그룹의 구문과 같은 조건 처리문에서 사용된다.
LOSTCARD 실행 시기
LOSTCARD 구문이 실행되면 아래 항목이 처리된다.
- SAS 로그에 다음 3가지 항목이 작성된다. Lost card 메시지, 열지시자, 현재 관측치를 구성하기 위하여 시도하면서 읽은 모든 관측치.
- 현재 처리중인 레코드를 삭제하고 관측치를 작성하지 않는다. 그리고, 프로그램 실행을 데이터 스텝의 시작으로 반환한다.
- 자동 변수 _N_의 값을 값을 증가시키지 않는다. (일반적으로, SAS는 각 데이터 스텝에서 반복을 시작 할 때마다 _N_의 값을 +1 씩 증가시킨다.)
- 그룹에서 두 번째 관측치의 값을 읽기 위하여 INPUT 구문에서 지정한 레코드의 개수를 읽는다
- Lost card에 대한 조건이 지정된 IF조건문이 참이면 1~4 단계를 반복한다. Log를 읽기 쉽게 하기 위해서 메시지와 주어진 레코드 그룹 위에 열지시자를 출력한다. 추가적으로, 비록 관측치를 구성하기 위하여 레코드를 여러 차례 사용하였더라도, 각 레코드를 한 번 출력한다.
- Lost card에 대한 조건이 지정된 IF 조건문이 참이 아닌 경우에는 관측치를 데이터 세트에 출력하라.
5. 참고 구문
- IF-THEN/ELSE 구문
6. 예 제
예제 : 입력 데이터 재동기화 하기
다음 예제는 결측치 레코드를 확인하고, 입력 데이터를 재동기화하기 위하여 조건문에서 LOSTCARD 구문을 지정한다.
SAS Program |
data inspect;
input id 1-3 age 8-9 #2 id2 1-3 loc
#3 id3 1-3 wt;
if id ne id2 or id ne id3 then
do;
put 'DATA RECORD ERROR: ' id= id2= id3=;
lostcard;
end;
datalines;
301 32
301 61432
301 127
302 61
302 83171
400 46
409 23145
400 197
411 53
411 99551
411 139
;
관측치를 작성하기 전에 데이터 스텝은 3개의 입력 레코드를 읽는다. 만약 레코드 1에 있는 식별 번호(ID변수)가 두 번째(ID1) 또는 세 번째(ID2) 식별 번호와 같지 않으면, 레코드가 잘못 입력되거나 생략된다. 식별 번호가 유효하지 않으면 IF-THEN의 DO 구문은 PUT 구문에서 지정된 메시지를 출력하도록 하고, LOSTCARD 구문을 실행한다.
다음 예제에서, 두 번째 관측치의 세 번째 레코드(ID3=400)가 결측값이다. 세 번째 관측치의 두 번째 레코드는 잘못된 값이 입력되어 있다. (ID=400 에서 ID2=409). 결과적으로 데이터 세트는 ID 301과 411에 대한 2개의 관측치를 소유한다. ID=302 와 ID=400의 관측치는 출력되지 않는다. 데이터 스텝이 실행하는 중에 PUT과 LOSTCARD 구문은 SAS 로그에 다음 문장을 출력한다.
[LOG 출력결과]
Results |
DATA RECORD ERROR: id=302 id2=302 id3=400
NOTE: LOST CARD.
RULE:----+----1----+----2----+----3----+----4----+----5----+----
14 302 61
15 302 83171
16 400 46
DATA RECORD ERROR: id=302 id2=400 id3=409
NOTE: LOST CARD.
17 409 23145
DATA RECORD ERROR: id=400 id2=409 id3=400
NOTE: LOST CARD.
18 400 197
DATA RECORD ERROR: id=409 id2=400 id3=411
NOTE: LOST CARD.
19 411 53
DATA RECORD ERROR: id=400 id2=411 id3=411
NOTE: LOST CARD.
20 411 99551
14,15,16,17,18,19,20은 SAS로그의 라인 번호이다.
[SAS Statement] SAS 데이터 스텝 구문 사전 목록] |
SAS 함수(SAS Function) 리스트 링크 |
'SAS > SAS 구문사전' 카테고리의 다른 글
【SAS Statement】 MISSING 구문 (0) | 2022.02.03 |
---|---|
【SAS Statement】 MERGE 구문 (0) | 2022.02.03 |
[SAS Statement] LOCK 구문 (0) | 2022.02.03 |
【SAS Statement】 LIST 구문 (0) | 2022.02.03 |
【SAS Statement】 LINK 구문 (0) | 2022.02.02 |
댓글