* 물리적 삭제 : 실제 데이터를 삭제를 위하여 컴퓨터 자원이 많이 필요함;
* 논리적 삭제 : PROC SQL의 DELETE구문, MODIFY와 REMOVE 구문
* 삭제 필드에 대하여 체크를 통하여 사용을 못하게 함
* 대용량 테이블에 대하여 일부 관측치 삭제시 논리적 삭제가 권장
* 실제 데이터가 삭제 된것이 아니라 삭제 필드를 체크한 것으로, 향후 테이블 재생성 필요
* 삭제 필드를 저장하고 있으므로 용량은 삭제전과 동일
* 만약 인덱스가 존재하는 파일에서 인덱스 변수의 해당값을 삭제시 더 좋은 성능을 보임;
* 확인방법
* 1. 탐색기창 - 테이블 속성 - 상세정보의 삭제된 행(Deleted Observations)
* 2. Proc contents 의 삭제된 관측치(Deleted Rows);
* 3. ATTRN 함수의 NDEL 옵션;
*************************************************************************************************;
* 대상건수중 삭제건수의 비율이 높은 경우는 물리적 삭제가 더 빠를 수 있음
* ( 전체를 읽는 것 보다 일부를 작성하는 것이 더 빠를 수 있을 듯 합니다.)
* [참고]논리적 삭제 필요성;
* ※ 물리적/논리적 삭제가 필요한 이유
-> 물리적 삭제의 경우 삭제를 하면 해당 행에 대해 rock이 걸려 업무 시 방해가 많이 된다.
-> 따라서 기본적으로 왠만하면 업무중에 column을 삭제를 하지 않고 삭제를 할 경우 논리적 삭제를
먼저 한 뒤 업무 종료 후 물리적삭제를 사용하는 것이 좋다.
* 논리적 삭제 확인;
data BACK;
INPUT VAR;
CARDS;
1
1
2
2
2
;
run;
* 논리적 삭제;
proc sql;
DELETE from BACK
WHERE VAR=2;
quit;
* 논리적으로 삭제된 필드를 포함하여 출력;
DATA _NULL_;
SET BACK NOBS=N1;
PUT N1=;
RUN;
* 삭제된 관측치 : 3;
PROC CONTENTS DATA=BACK;
RUN;
* ATTRN 함수 이용하여 확인;
data BACK;
INPUT VAR;
CARDS;
1
1
2
2
2
;
run;
DATA BACK;
MODIFY BACK;
IF VAR=2 THEN REMOVE;
RUN;
DATA ATTRN;
DSID = OPEN("BACK");
NDEL = ATTRN(DSID,"NDEL"); * 논리적 삭제 레코드;
NLOBS = ATTRN(DSID,"NLOBS"); * 논리적 관측치(삭제 제외);
NLOBSF = ATTRN(DSID,"NLOBSF"); * 논리적관측치(삭제 제외);
NOBS = ATTRN(DSID,"NOBS"); * 물리적관측치수(논리적 삭제 포함);
rc = close(dsid);
RUN;
* 물리적 삭제;
data BACK;
INPUT VAR;
CARDS;
1
1
2
2
2
;
run;
DATA BACK;
SET BACK;
IF X=2 THEN DELETE;
RUN;
* 삭제된 관측치 0;
PROC CONTENTS DATA=BACK;
RUN;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Lock in the best rate now before the price increases on April 1.