SAS Как настроить шаг данных для добавления только существующих данных?

#sas

#sas

Вопрос:

Я пишу макрофункцию. Некоторые таблицы будут созданы, если будут выполнены определенные критерии. Я хочу добавить все эти таблицы вместе в конце. Есть ли способ, которым я могу позволить функции добавлять только существующую таблицу?

Один из методов, о которых я могу подумать, — позволить системе проверить, существует ли таблица, если да, то добавлять одну за другой. Например:

     %if %sysfunc(exist(table1)) %then %do; 
           data final_table; set table1; run;
    %end;
    %if %sysfunc(exist(table2)) %then %do; 
           data final_table; set table2; run;
    etc......
  

это сделает код действительно длинным и неэффективным. Есть ли какой-либо способ решить эту проблему? Спасибо

Ответ №1:

Не ждите конца, чтобы объединить их. Создавайте его по ходу работы.

Вы могли бы использовать PROC APPEND. Если БАЗОВАЯ таблица не существует, она создаст ее. В противном случае наблюдения добавляются.

 proc append force base=final_table data=tableamp;i;
run;
  

Обратите внимание, что для этого потребуется, чтобы наборы данных имели одинаковые столбцы.

Комментарии:

1. Спасибо за ваш ответ! но если таблица amp; i не существует, добавление процедуры по-прежнему не работает.

2. Почему вы пытаетесь добавить таблицу, которую вы не создавали?

Ответ №2:

Используйте соглашение об именовании для своих таблиц и храните их в одном месте. Это было бы так же просто, как использовать согласованный префикс, такой как _TEMP_Table1, _temp_table2 и т.д.

Затем, когда вы добавляете их, просто используйте оператор двоеточия:

 data want;
  set _temp_table: ;
run;
  

Будут включены только таблицы, начинающиеся с этого префикса.

Это также упрощает удаление их всех позже для очистки вашего процесса.

Ответ №3:

Я придумал решение. Я публикую здесь на случай, если кто-то хочет знать. Я могу создавать пустые таблицы перед запуском любой из этих таблиц. Когда я добавляю все промежуточные таблицы, если они не существуют, будет добавлена только пустая таблица.

          data table1 table2....; stop run; /*create null tables*/

         /******/
         run the rest of the function
         /*****/

         data final_table; set table1 table2....; run; 
         /*it won't affect anything even if one of the table tableamp;i is not created*/
  

Комментарии:

1. Почему бы просто не использовать подстановочный знак? set table:;