2015-10-19 3 views
0

Это следовать посту эффективно конкатенации много Sas наборов данных: Efficiently concatenate many sas datasetsконкатенация много таблиц САЦ

Ну, я, имеющей подобную задача, т.е. для конкатенации более 10000 Sas таблицы одной и той же структуры. Каждая таблица состоит из 2 строк и 13 столбцов и названа в последовательном порядке (данные, данные1, данные 2, ...). Все мои таблицы сохраняются на внешнем диске: «D: \ MySASfolder \». Конкатенация с использованием SET в datastep, похоже, исчерпала память, и приложение proc может быть решением. Тем не менее, мне трудно понять код, сделанный BellevueBob, в частности, я не уверен, как макрос может отменить мои 10000 таблиц данных. Может кто-нибудь, пожалуйста, помогите мне пройти через коды кода, пожалуйста. Большое спасибо, Mai

+0

Ответ Боба использует простой макрос '% do' для работы через все таблицы. Сделайте немного чтения в макросах SAS, а затем отправьте еще один вопрос, если есть его часть, которую вы все еще не понимаете. – user667489

+0

Возможный дубликат [Эффективно объединить множество наборов данных sas] (http://stackoverflow.com/questions/13442882/efficiently-concatenate-many-sas-datasets) – user667489

+1

Пробовал ли вы использовать список членов в инструкции SET? 'данные хотят; установить данные данных1-data9999; run; 'работает ли он с большим количеством наборов данных, на которые ссылается одна инструкция SET? – Tom

ответ

0

Другой вопрос на самом деле не совсем такой же, как у вас; у него есть проблема в том, что индивидуальные данные создавались по требованию, а затем добавляли.

Если набор данных уже существует, у вас гораздо более легкая проблема.

Например, давайте сделаем data1-data3 (который вы уже сделали на предыдущем шаге), а затем добавьте их, используя один оператор тире (который создает новый список имен, содержащий все имена между первым и фамилия, в числовом порядке).

data data1; 
    x=1; 
run; 

data data2; 
    x=2; 
run; 

data data3; 
    x=3; 
run; 

data want; 
    set data1-data3; 
run; 

Конечно, если у вас есть data вам придется также добавить, что.

data want; 
    set data data1-data3; 
run; 

Вы также можете указать libname на этом.

data want; 
    set mylib.data1-mylib.data3; 
run; 
+0

И - как побочная заметка - это плохая практика программирования. Не создавайте кучу эффективных безымянных наборов данных. Вместо этого создайте имена с полезными именами - и, если возможно, добавьте их вместе на шаге, который они создали, вместо того, чтобы создавать кучу наборов данных, которые будут сидеть. Таким образом вы можете избежать многих проблем. – Joe

+0

Да, пользователь667489 вы правы. Моя битва немного отличается от задачи Боба. Итак, теперь я получил код: –

+0

Tom & Joe, с более чем 10000 таблицами, SET не работает, по крайней мере, с моего ПК из-за проблемы с памятью. Система должна прочитать все наблюдения за базой и новым набором данных, в то время как proc append не нуждается в чтении наблюдений. –

Смежные вопросы