포스팅 목차
o UPDATE 구문
1. 목 적
UPDATE 구문은 Master 파일의 데이터 항목을 변경 및 삽입하기 위하여 Master 파일을 기준으로 Transactions 파일의 데이터 값으로 갱신(Update) 또는 삽입(Insert) 작업을 수행한다.
2. 문 법
UPDATE master-data-set <(data-set-options)> transaction-data-set<(data-set-options)> < END=variable> < UPDATEMODE=MISSINGCHECK|NOMISSINGCHECK>; BY by-variable; |
1) master-data-set
Master 파일로 사용되는 SAS 데이터 세트 지정한다. 이름은 1단계 이름(예, FITNESS), 2단계 이름(예, IN.FITNESS) 또는 특별한 SAS 데이터 세트 이름을 사용할 수 있다. 또한 데이터 세트 이름 대신에 운영시스템이 인식하는 파일에 대한 물리적 경로명을 인용부호 안에 지정할 수 있다.
범위 : | 이름은 1단계 이름(예, FITNESS), 2단계 이름(예, IN.FITNESS) 또는 특별한 SAS 데이터 세트 이름을 사용 할 수 있다. |
Tip : (SAS 9.3) | 데이터 세트 이름 대신에 운영시스템이 인식하는 파일에 대한 물리적 경로명을 지정 할 수 있다. 경로명은 단일 또는 이중 인용 부호 안에 작성해야 한다. |
필요사항 : | SAS Language Reference: Concepts 에서 “Rules for Words and Names in the SAS Language” |
2) (data-set-options)
프로그램 처리를 위하여 데이터 스텝에서 변수를 읽는 경우에 SAS가 추가적으로 수행할 수 있는 작업 내용을 지정하라.
데이터 세트 옵션(data-set-options)은 SAS 데이터 세트 이름 바로 뒤의 괄호 안에 작성해야 한다. 변수 삭제(Drop=), 포함(Keep=), 이름 변경(Rename=) 기능은 데이터 세트를 갱신할 때 유용한 기능이다.
양쪽 테이블에서 동일한 이름을 가지는 변수 중에서, Master 데이터 세트의 변수 이름을 변경하여서 Transactions 테이블의 값이 Master 테이블의 값을 갱신하는 것을 방지할 수 있다. 이를 통하여 프로그램 수행 과정에서 변수 비교 작업과 같이 양쪽 테이블의 변수를 함께 확인할 수 있다.
필요사항 : | 데이터 세트 옵션(data-set-options)은 SAS 데이터 세트 이름 바로 뒤의 괄호 안에 작성해야 한다. |
Tip : | 변수 삭제(Drop=), 포함(Keep=), 이름 변경(Rename=) 기능은 데이터 세트를 갱신 할 때 유용한 기능이다. 양쪽 테이블에서 동일한 이름을 가지는 변수 중에서, Master 데이터 세트의 변수 이름을 변경하여서 Transactions 테이블의 값이 Master 테이블의 값을 갱신하는 것을 방지 할 수 있다. 한쪽 테이블 변수의 이름을 변경하여서 프로그램 수행 과정에서 변수 비교 작업과 같이 양쪽 테이블의 변수를 모두 사용 할 수 있다. |
주요기능 : | 예제2 : 변수 이름을 변경한 이후에 Update 작업 수행하기 |
관련사항 : | SAS Data Set Options: Reference 에서 입력 데이터 세트와 함께 사용되는 데이터 세트 옵션의 리스트 참조 |
3) transaction-data-set
Master 데이터 세트에 적용하기 위한 변경 내용을 포함하고 있는 SAS 데이터 세트를 지정한다.
범위 : | 이름은 1단계 이름(예, HEALTH), 2단계 이름(예, IN.HEALTH) 또는 특별한 SAS 데이터 세트 이름을 사용 할 수 있다. |
Tip : (SAS 9.3) | 데이터 세트 이름 대신에 운영 시스템이 인식하는 파일에 대한 물리적 경로명을 지정 할 수 있다. 경로명은 단일 또는 이중 인용 부호 안에 작성해야 한다. |
4) END=variable
파일의 끝(End-of-file)을 표시하는 임시 변수를 생성하도록 지정한다. 초기값이 0으로 지정된 변수는 UPDATE 구문이 마지막 관측치를 처리할 때 1로 설정된다. 이 변수는 출력 데이터 세트에 추가되지 않는다. XE "End-of-file:UPDATE 구문"
5) UPDATEMODE=MISSINGCHECK | NOMISSINGCHECK
Transaction 데이터 세트에서 변수의 결측치 값이 Master 데이터 세트에 존재하는 변수 값에 대하여 갱신 처리가 가능한지 여부를 지정한다.
(1) MISSINGCHECK (기본값)
Transaction 데이터 세트의 결측치 값이 Master 데이터 세트의 값을 교체하지 못하도록 한다.
(2) NOMISSINGCHECK
Transaction 데이터 세트의 결측치 값이 Master 데이터 세트의 값을 교체하는 것을 허용한다. 비록 MISSINGCHECK(기본값)이 적용된 경우에도 특별한 결측치 값은 예외적으로 Master 데이터 세트의 값을 교체할 수 있다.
기본값 : | MISSINGCHECK |
Tip : (SAS 9.3) | 비록 MISSINGCHECK(기본값)이 적용된 경우에도 특별한 결측치 값은 예외적으로 Master 데이터 세트의 값을 교체 할 수 있다. |
3. 범 주
SAS 기본 구문 (파일 처리 구문)
4. 상세설명
1) 필요사항
- UPDATE 구문은 양쪽 테이블에서 일치하는 관측치를 식별하기 위한 기준 변수를 지정하는 BY 구문과 함께 사용되어야 한다.
- BY 구문은 적용되는 UPDATE 구문 바로 뒤에 작성해야 하며, UPDATE 구문에 나열된 데이터 세트는 사전에 BY 구문에 나열된 변수로 정렬되거나 적당한 인덱스(INDEX)가 존재해야 한다.
- Master 데이터 세트의 개별 관측치 값은 BY 변수를 기준으로 중복 없이 유일한 값이어야 한다. BY 변수를 기준으로 중복 관측치가 존재하면, 동일 값을 가지는 첫 번째 관측치가 갱신(Update)된다. Transaction 데이터 세트는 BY 값을 기준으로 다수의 관측치를 소유할 수 있다. (다중 transaction 데이터 세트의 관측치는 출력 파일에 작성되기 전에 마스터 관측치에 모두 적용된다.)
2) Transaction 데이터 세트
일반적으로 Master 데이터 세트와 Transaction 데이터 세트는 동일한 변수를 소유한다. 그러나 처리 시간을 줄이기 위하여 갱신 처리를 수행하기 위한 변수로 구성된 Transaction 데이터 세트를 생성할 수 있는데, 출력 데이터 세트에 새롭게 변경될 변수만으로 구성할 수도 있다.
출력 데이터 세트는 Master 데이터 세트의 개별 관측치에 대하여 하나의 관측치를 포함한다. Transaction 관측치 중에서 Master 관측치와 일치하지 않는 관측치는 출력 데이터 세트에서 새로운 관측치로 삽입된다. 그러므로 갱신 처리 작업을 수행하지 않는 관측치는 Transaction 데이터 세트에서 삭제 후에 작업을 진행할 수 있다.
3) 결측치 값
기본적으로 UPDATEMODE=MISSINGCHECK 옵션이 적용되면 Transaction 데이터 세트의 결측치 값은 Master 데이터 세트에 존재하는 값을 교체하지 못한다. 그러므로, 만약 모든 변수가 아니라 일부 변수에 대하여 갱신 처리를 원하고, 변수 중에서도 일부 관측치를 갱신하기 위하여, Transaction 데이터 세트에서 변경 작업을 수행하지 않을 변수와 관측치 값을 결측치로 설정하라. Master 데이터 세트의 존재하는 값을 Transaction 데이터 세트의 결측치 값으로 교체를 원하면 UPDATEMODE=NOMISSINGCHECK 옵션을 사용하라.
비록 UPDATEMODE=MISSINGCHECK 옵션이 적용된 경우에도 Transaction 데이터 세트에 특별한 결측값 문자를 사용하여 결측치가 아닌 관측치 값을 결측치 값으로 대체 할 수 있다. Transaction 데이터 세트에 특별한 결측치를 생성하기 위하여 데이터 스텝에서 MISSING 구문을 사용하라. Transaction 데이터 세트에 특별한 결측치 값 A~Z 중에 하나를 정의하면, Master 데이터 세트의 수치형 변수는 특별한 결측값으로 갱신된다.
Master 데이터 세트의 최종 결과 값이 표준 결측치 값으로 갱신되기를 원하는 경우에 Transaction 데이터 세트에서 관측치 값을 결측치 값으로 표현하기 위하여 단일 밑줄(_)를 사용하라. Master 데이터 세트의 최종 값은 수치형 결측치 값에 대하여 마침표(.), 문자형 결측치 값에 대하여 공백으로 표현 할 것이다.
특별한 결측값에 대한 정의와 사용에 대한 상세한 정보는 “MISSING 구문”을 참조.
5. 비교 사항
- UPDATE 구문과 MERGE 구문 모두 SAS데이터 세트에서 관측치를 갱신한다.
- MERGE 구문은 두 번째 데이터 세트의 결측치 값으로 첫 번째 데이터 세트에 존재하는 값을 자동적으로 갱신한다. 그러나, UPDATE 구문은 기본적으로 결측치 값을 가지고 갱신 처리를 수행하지 않는다. Transaction 데이터 세트의 결측치 값을 가지고 Marter 데이터 세트의 존재하는 값을 덮어 쓰도록 하기 위하여 UPDATEMODE=NOMISSINGCHECK 옵션을 설정하라.
- UPDATE 구문은 Transaction 데이터 세트의 변동 사항에 대하여 Master 파일에서 선택된 관측치 값을 수정 또는 갱신한다. 더불어 UPDATE 구문은 새로운 관측치를 추가 할 수 있다.
6. 관련 구문
구문명 | 구문내용 |
BY 구문 | 데이터 세트에서 SET, MERGE, UPDATE 구문의 그룹별 관측치에 대한 처리 방식을 지정하고, 특수한 그룹화 변수를 내부적으로 생성한다. |
MERGE 구문 | 다수의 SAS 데이터 세트의 관측치를 하나의 관측치로 결합하여 새로운 SAS 데이터 세트를 생성한다. |
MISSING 구문 | 입력 데이터에서 수치형 데이터의 특별한 결측치 값을 표현하기 위한 문자를 지정한다. |
MODIFY 구문 | 새로운 SAS 데이터 세트를 추가로 생성하지 않고 기존에 존재하는 SAS 데이터 세트의 관측치에 대하여 대체, 삭제, 추가 작업을 수행한다. |
SET 구문 | 하나 이상의 SAS 데이터 세트에서 관측치를 읽는다. |
MISSING= 시스템 옵션 | |
데이터 세트 옵션 |
- Reading, Combining, and Modifying SAS Data Sets in SAS Language Reference: Concepts
[SAS Statement] SAS 데이터 스텝 구문 사전 목록]
7. 예 제
예제1 : UDATE 기본 활용
다음 프로그램 문장은 Marter 데이터 세트(OHIO.JAN)에 Transaction 데이터 세트(OHIO.WEEK4)의 정보를 적용하여 새로운 데이터 세트(OHIO.QTR1) 생성한다. BY 변수 STORE는 양쪽 데이터 세트 HIO.JAN 와 OHIO.WEEK4 에 존재해야 하고, Master 데이터 세트의 값은 BY변수를 기준으로 유일한 값이어야 한다.
SAS Statements |
data ohio.qtr1;
update ohio.jan ohio.week4;
by store;
run;
예제2 : 변수 이름을 변경한 이후에 Update 작업 수행하기
다음 예제에서 FITNESS 데이터 세트에서 변수 이름을 변경하여서 프로그램 데이터 벡터(PDV)에서 동일한 이름의 변수 값을 덮어 쓰지 않도록 한다. Master 데이터 세트에서 WEIGHT 변수 이름을 변경하고, Transaction 데이터 세트의 WEIGHT변수와 차이를 계산한다.
[데이터 세트]
[Master 데이터 세트]
HEALTH
OBS ID NAME TEAM WEIGHT
1 1114 sally blue 125
2 1441 sue green 145
3 1750 joey red 189
4 1994 mark yellow 165
5 2304 joe red 170
[Transaction 데이터 세트]
FITNESS
OBS ID NAME TEAM WEIGHT
1 1114 sally blue 119
2 1994 mark yellow 174
3 2304 joe red 170
SAS Statements |
options nodate pageno=1 linesize=80 pagesize=60;
/* 양쪽 데이터는 ID 변수로 정렬 */
proc sort data=health;
by id;
run;
proc sort data=fitness;
by id;
run;
/* Transaction 데이터를 사용하여 Master 데이터 세트 갱신(Update) */
data health2;
length STATUS $11;
update health(rename=(weight=ORIG) in=a)
fitness(drop=name team in=b);
by id ;
if a and b then
do;
CHANGE=abs(orig - weight);
if weight
else if weight>orig then status='gain';
else status='same';
end;
else status='no weigh in';
run;
options nodate ls=78;
proc print data=health2;
title 'Weekly Weigh-in Report';
run;
[PROC PRINT 결과물 : Health2 데이터 세트]
Weekly Weigh-in Report 1
OBS STATUS ID NAME TEAM ORIG WEIGHT CHANGE
1 loss 1114 sally blue 125 119 6
2 no weigh in 1441 sue green 145 . .
3 no weigh in 1750 joey red 189 . .
4 gain 1994 mark yellow 165 174 9
5 same 2304 joe red 170 170 0
예제3 : 결측값을 사용하여 갱신 작업 수행하기
다음 예제는 Master 데이터 세트(PAYROLL)와 일반적인 결측치 값과 특수 결측치 값을 모두 소유한 Transaction 데이터 세트(INCREASE)를 생성한다.
- ID1026의 급여는 변경되지 않았다.
- ID1034의 급여는 특별한 결측값으로 갱신(Update)되었다.
- ID1057의 급여는 표준 결측값으로 갱신(Update)되었다.
SAS Statements |
/* MASTER 데이터 세트 생성 */
data payroll;
input ID SALARY;
datalines;
1011 245
1026 269
1028 374
1034 333
1057 582
;
/* Transaction 데이터 세트 생성 */
data increase;
input ID SALARY;
missing A _;
datalines;
1011 376
1026 .
1028 374
1034 A
1057 _
;
/* Transaction 데이터를 사용하여 Master 데이터 세트 갱신(Update) */
data newpay;
update payroll increase;
by id;
run;
proc print data=newpay;
title 'Updating with Missing Values';
run;
[PROC PRINT 결과물 : Newpay 데이터 세트]
Updating with Missing Values 1
OBS ID SALARY
1 1011 376
2 1026 269 <=== 값은 269로 유지
3 1028 374
4 1034 A <=== 특별한 결측치 값
5 1057 . <=== 일반 결측치 값
[SAS Statement] SAS 데이터 스텝 구문 사전 목록] |
SAS 함수(SAS Function) 리스트 링크 |
'SAS > SAS 구문사전' 카테고리의 다른 글
【SAS Statement】 WINDOW 구문 (0) | 2022.02.08 |
---|---|
【SAS Statement】 WHERE 구문 (0) | 2022.02.07 |
【SAS Statement】 TITLE 구문 (0) | 2022.02.07 |
[SAS Statement] SYSECHO 구문 (0) | 2022.02.07 |
【SAS Statement】 Sum 구문 (0) | 2022.02.07 |
댓글