문제

가장 무엇입니까? 효율적인 SAS에서 테이블을 떨어 뜨리는 방법?

많은 수의 테이블을 반복하고 떨어 뜨리는 프로그램이 있으며 Proc SQL 사이에 성능 차이가 있는지 알고 싶습니다. 및 Proc 데이터 세트; 한 번에 단일 테이블을 떨어 뜨리기 위해 ..

또는 아마도 다른 방법이 있다면 ???

도움이 되었습니까?

해결책

OS에 아웃소싱하는 것이 합리적이라면 가장 빠를 수 있습니다. 그렇지 않으면 내 비과학적인 관찰은 그 드롭 테이블이 proc sql 가장 빠릅니다. 이것은 내가 예상 한대로 나를 놀라게했다 proc datasets 가장 빠르게.

아래 코드에서 4000 개의 더미 데이터 세트를 작성한 다음 다른 방법으로 모두 삭제하십시오. 첫 번째는 SQL을 사용하고 내 시스템에서 파일을 삭제하는 데 약 11 초가 걸렸습니다.

다음 두 가지 모두 사용됩니다 proc datasets. 첫 번째는 각 데이터 세트에 대한 삭제 명령문을 작성한 다음 삭제합니다. 두 번째는 담요 킬 명령을 발행하여 작업 디렉토리의 모든 것을 삭제합니다. (나는이 기술이 가장 빠르기를 기대했다). 두 Proc DataSets 루틴 모두 약 20 초 동안 4000 파일을 모두 삭제하는 것으로보고되었습니다.

%macro create;
proc printto log='null';run;
%do i=1 %to 4000;
data temp&i;
x=1;
y="dummy";
output;run;
%end;
proc printto;run;
%mend;

%macro delsql;
proc sql;
%do i=1 %to 4000;
drop table temp&i;
%end;
quit;
%mend;

%macro deldata1;
proc datasets library=work nolist;
   %do i=1 %to 4000;
   delete temp&i.;
   %end;
run;quit;
%mend;

%macro deldata2;
proc datasets library=work kill;
run;quit;
%mend;

option fullstimer;
%create;
%delsql;

%create;
%deldata1;

%create;
%deldata2;

다른 팁

나는 os-delete 접근법으로 바이올린을 시도했다.

X-Command로 삭제하는 것은 권장 할 수 없습니다. 걸렸습니다 영원히!

그런 다음 DataStep에서 시스템 명령으로 시도했습니다.

%macro delos;
data _null_;
do i=1 to 9;
delcmd="rm -f "!!trim(left(pathname("WORK","L")))!!"/temp"!!trim(left(put(i,4.)))!!"*.sas7*";
rc=system(delcmd);
end;
run;
%mend;

보시다시피 삭제를 9 개의 별도 삭제 명령으로 나누어야했습니다. 그 이유는, 내가 와일드 카드 "*"를 사용하고 있으며, 기본 운영 체제 (AIX)는 이것들을 목록으로 확장 한 후 너무 커서 처리하기에는 ...

이 프로그램은 기본적으로 9 개의 파일 그룹 "temp [1-9]*. sas7*"각각에 대해 삭제 명령을 구성하고 명령을 발행합니다.

CMJOHNS 답변에서 매크로 기능을 사용하여 4000 개의 데이터 테이블을 작성하면이 접근법을 사용하여 5 초 안에 삭제할 수 있습니다.

따라서 직접 운영 체제 삭제가 예상대로 질량 지식의 가장 빠른 방법입니다.

우리는 테이블이나 데이터 세트를 논의하고 있습니까?

테이블은 데이터베이스 테이블을 의미합니다. 이를 빠른 방법으로 제거하려면 Proc SQL 패스 스루 시설을 사용하는 것이 가장 빠릅니다. 구체적으로 데이터베이스에 한 번 연결하고 모든 테이블을 떨어 뜨릴 수 있다면 분리하십시오.

SAS에서 데이터 세트를 논의하는 경우 Proc SQL과 Proc 데이터 세트가 모두 매우 유사하다고 주장합니다. 응용 프로그램 관점에서 볼 때 둘 다 동일한 공제를 통해 파일을 삭제하는 시스템 명령을 만듭니다. SAS 사용자 그룹이나 프레젠테이션에서 본 모든 테스트는 항상 다른 방법을 사용하여 한 방법을 사용하는 것이 한계이며 많은 변수를 기반으로한다고 제안했습니다.

데이터 세트 / 테이블을 삭제하는 가장 빠른 방법이 필요한 경우 테스트하면됩니다. SAS의 각 설치 및 설정은 테스트를 보증하기에 충분히 다릅니다.

매우 큰 데이터를 제외하고는 더 빠른 측면에서, 나는 그들 사이에 차이가 거의 없다는 것을 베팅 할 것입니다. 그러나 영구 SAS 데이터 세트를 처리 할 때 SAS가 디자인 된 메소드를 사용하여 영구 데이터 세트를 더 잘 조작하는 것이 아니라 SQL 구현이 아닌 Proc SQL 대신 Proc 데이터 세트를 사용하는 것을 좋아합니다.

유사하게 명명 된 임시 테이블에 대한 간단한 솔루션 :

모든 테이블이 동일한 접두사 (예 : p1_table1 및 p1_table2)로 시작하면 다음 코드는 P1로 시작하는 테이블을 삭제합니다.

proc datasets; delete p1: ; run;

Proc Delete는 또 다른 문서화되지 않은 솔루션입니다.

http://www.sascommunity.org/wiki/proc_delete

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top