Отбрасывание таблицы в SAS - PullRequest
12 голосов
/ 29 апреля 2009

Каков наиболее эффективный способ удаления таблицы в SAS?

У меня есть программа, которая зацикливает и отбрасывает большое количество таблиц и хотела бы знать, есть ли разница в производительности между PROC SQL; и PROC DATASETS; для сбрасывания одного стола за раз ..

Или, если есть другой путь, возможно ???

Ответы [ 6 ]

13 голосов
/ 29 апреля 2009

Если есть разумный аутсорсинг к ОС, это может быть быстрее всего. В противном случае мои ненаучные наблюдения, кажется, предполагают, что таблица сброса в proc sql является самой быстрой. Это удивило меня, так как я ожидал, что proc datasets будет самым быстрым.

В приведенном ниже коде я создаю 4000 фиктивных наборов данных, а затем пытаюсь удалить их все различными методами. Первый - с помощью sql, и в моей системе удаление файлов заняло около 11 секунд.

Следующие два используют proc datasets. Первый создает оператор удаления для каждого набора данных, а затем удаляет. Второй просто запускает команду kill blanket, чтобы удалить все в рабочем каталоге. (Я ожидал, что эта техника будет самой быстрой). Обе процедуры набора данных proc сообщили о 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;
4 голосов
/ 30 апреля 2009

Я попытался возиться с подходом удаления ОС.

Удаление с помощью X-команды не рекомендуется. Это заняло навсегда !

Затем я попытался выполнить системную команду в шаге данных:

%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) расширяет их до списка, который затем становится слишком большим для обработки ...

Программа в основном создает команду удаления для каждой из девяти файловых групп "temp [1-9] *. Sas7 *" и выдает команду.

Используя функцию создания макроса из ответа cmjohns для создания 4000 таблиц данных, я могу удалить их всего за 5 секунд, используя этот подход.

Так что прямое удаление операционной системы, как я и ожидал, является самым быстрым способом массового удаления.

2 голосов
/ 13 мая 2014

Простое решение для временных таблиц с одинаковыми именами:

Если все ваши таблицы начинаются с одинакового префикса, например, p1_table1 и p1_table2, то следующий код удалит любую таблицу, начинающуюся с p1

proc datasets; delete p1: ; run;

2 голосов
/ 12 июля 2012

С точки зрения того, что быстрее, за исключением очень больших данных, я бы поспорил, что между ними мало различий. Однако при обработке постоянных наборов данных SAS мне нравится использовать наборы PROC DATASETS, а не PROC SQL, просто потому, что я чувствую себя лучше при работе с постоянными наборами данных с использованием метода, разработанного SAS, а не реализации SQL

2 голосов
/ 29 апреля 2009

Мы обсуждаем таблицы или наборы данных?

Таблицы подразумевают таблицы базы данных. Чтобы быстро избавиться от них, самым быстрым будет использование функции сквозного доступа через SQL. В частности, если вы можете подключиться к базе данных один раз и отбросить все таблицы, отключите ее.

Если мы обсуждаем наборы данных в SAS, я бы сказал, что наборы proc sql и proc очень похожи. С точки зрения приложения, они оба проходят один и тот же вывод, чтобы создать системную команду, которая удаляет файл. Все тесты, которые я видел в группах пользователей SAS или презентациях, всегда предполагали, что использование одного метода над другим является незначительным и основано на многих переменных.

Если необходимо, чтобы у вас был самый быстрый способ отбросить наборы данных / таблицы, вам, возможно, придется просто протестировать его. Каждая установка и настройка SAS достаточно разные, чтобы гарантировать тестирование.

1 голос
/ 08 декабря 2009

proc delete - еще одно, хотя и недокументированное, решение.

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

...