BookmarkSubscribeRSS Feed

SAS 데이터 세트를 삭제하는 방법

Started ‎02-15-2022 by
Modified ‎02-15-2022 by
Views 4,371

SAS 내 데이터 세트는 프로그램에서 빈번히 발생합니다. 보통 보고서 및 기타 용도를 위해 보유하지만 결국에는 이 중 일부는 불필요하다고 생각되면 삭제해야 할 때가 옵니다. 이러한 세트를 제거할 경우 처리 중에 할당되는 저장 공간과 메모리를 절약할 수 있으므로 주기적으로 정리하는 것이 가장 좋습니다. 이 포스팅은 SAS 내 데이터 세트를 삭제하는 다양한 방법을 다룹니다. 여러분이 활용할 수 있는 모든 방법은 아니지만 경험상 일반적인 방법을 소개합니다.

 

PROC DELETE – 깨끗하게 삭제하는 방법

 

SAS의 대부분의 작업과 마찬가지로 삭제용 PROC이 존재합니다. PROC DELETE는 단순하며 효율적으로 수행합니다.

WORK.DATA1이라는 단일 데이터 세트를 삭제하려고 하는 경우

proc delete data=work.data1; run;

 

여러 개의 데이터 세트를 삭제하려면 DATA= option에 추가하면 됩니다.

proc delete data=work.a1 work.a2 ; run;

 

예를 들어, DATA1에서 DATA5까지 순서대로 명명된 WORK에 데이터 세트 범위 일부를 삭제하려는 경우: (여기서 LIBRARY= option을 사용하여 DATA=에서 libname을 생략할 수 있습니다.)

 proc delete library=work data=DATA1-DATA5; run;

 

데이터 세트 이름에 대해 "와일드카드" 콜론 목록 매칭을 지원하지 않지만 PROC DATASETS에서 이를 수행하는 방법에 대해 읽어보시길 추천합니다. PROC DELETE에는 다양한 멤버 유형 및 생성 데이터 세트에 대한 몇 가지 옵션이 존재합니다. 설명서

 

참고: 수년 동안 PROC DELETE는 문서화되지 않아 마치 신화와 같이 여겨졌습니다. SAS 9.4부터 SAS 프로그래머와 진취적인 SAS R&D 개발자의 순수한 의지에 의해 정리되었습니다. 이 자료는 공식 문서가 되었습니다.

 

DELETE 명령을 활용한 PROC DATASETS

PROC DATASETS모든 데이터 세트에 대한 다목적 유틸리티 프로시저입니다. 속성을 복사, 이동, 수정 및 삭제할 수 있습니다.

 

WORK 라이브러리에서 A1, A2, A3이라는 데이터 세트 3개를 삭제하려는 경우

proc datasets nolist lib=work;

delete a1 a2 a3 ;

quit;

 

또는 콜론 목록(또는 범위 목록) 구문을 사용하는 방법이 있습니다.

proc datasets nolist lib=work;

delete a: ;    /* all data sets that begin with "A" */

delete a1-a3;  /* or data sets in this range */

quit;

 

NOLIST 옵션을 사용했다는 점이 핵심입니다. 이는 DATASETS 프로시저가 현재 SAS 라이브러리에 있는 내용을 보여주는 자세한 출력을 생성하는 것을 방지합니다. 기본적으로 PROC DATASETS는 매우 복잡하지만 NOLIST NODETAILS를 사용하여 출력을 제한할 수 있습니다.

 

PROC DATASETS KILL를 통한 라이브러리 전체 삭제

 

SAS 라이브러리 내의 모든 데이터 세트 폐기를 원하는 경우 KILL 옵션을 활용할 수 있습니다.

/* delete all data files from WORK */

proc datasets nolist lib=work kill;

quit;

 

WORK 라이브러리에는 진행 중인 작업과 관련된 데이터가 포함되는 경우가 많으므로 임시 데이터를 위한 임시 저장 위치에 라이브러리를 생성 후 완전히 삭제하면 됩니다.

/* create a subfolder in WORK for my data */

options dlcreatedir;

libname scratch "%sysfunc(getoption(WORK))/scratch"; 

 

/* just adding some data for example purpose */

data scratch.a1 scratch.a2 scratch.a3;

set sashelp.class;run; 

 

/* more operations with scratch data */ 

 

/* now clear it when ready */

proc datasets lib=scratch kill nolist;

quit;

 

PROC DATASETS SAVE 명령을 통한 부분 삭제

라이브러리에서 대부분의 데이터를 삭제하고 일부만 남기고 싶은 경우 SAVE 명령을 사용할 수 있습니다.

 

다음은 SAVE 명령을 대신 사용하여 하나의 데이터 세트만 저장하도록 수정된 KILL 예시입니다.

/* just adding some data for example purpose */

data scratch.a1 scratch.a2 scratch.a3;

set sashelp.class;

run; 

 

/* now delete all but A1 */

proc datasets lib=scratch nolist;

save a1;

quit;

 

나머지 모두를 삭제하려는 의도를 포함하지 않으므로 구문이 다소 이상해 보일 수 있지만 정상 작동합니다. 다음은 해당 명령문 SAS 로그입니다.

NOTE: Saving SCRATCH.A1 (memtype=DATA).
NOTE: Deleting SCRATCH.A2 (memtype=DATA).
NOTE: Deleting SCRATCH.A3 (memtype=DATA).

 

SAS 데이터 세트의 수명 주기를 관리하기 위한 더 많은 PROC DATASETS가 있습니다.  @MMMMIIIIKKKKEEEE가 작성한 PROC DATASETS: The Swiss Army Knife of SAS Procedures을 통해 확인하실 수 있습니다.

 

DROP TABLE을 통한 PROC SQL 내 삭제

마지막으로 SQL 코딩 전문가를 위한 내용입니다. PROC SQL 시퀀스에 문제가 있으며 일부 데이터를 정리하려는 경우, DROP TABLE 명령문을 사용할 수 있습니다.

proc sql;

drop table work.a1;

drop table work.a2;

drop table work.a3;

quit;

 

데이터가 SAS/ACCESS 엔진을 통해 액세스하는 데이터베이스에 있는 경우 이는 더욱 유용합니다. PROC SQL은 데이터를 삭제하기 위해 데이터베이스에 적절한 명령을 보내야 합니다. 관련 데이터 유형에 사용할 수 있는 DROP VIEW DROP INDEX 명령이 있습니다.

 

%DELTABLE 자동 호출 매크로 사용

SAS에는 PROC SQL DROP TABLE 접근 방식을 자동화할 수 있도록 하는 자동 호출 매크로가 포함되어 있습니다. %DELTABLE를 통해 다수의 테이블을 나열할 수 있으며, 데이터 파일 존재 여부 및 테이블 또는 뷰 여부 감지 및 올바른 명령문 생성이 가능할 만큼 훌륭한 기능을 포함하고 있습니다.

%deltable (tables=scratch.a1 scratch.a2 scratch.a3)

Version history
Last update:
‎02-15-2022 01:22 AM
Updated by:
Contributors

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Article Labels
Article Tags