SAS Как настроить шаг данных для добавления только существующих данных? - PullRequest
2 голосов
/ 04 апреля 2019

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

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

    %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......

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

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

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

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

data want;
  set _temp_table: ;
run;

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

Это также облегчает отбрасывание их позже, чтобы очистить ваш процесс.

2 голосов
/ 04 апреля 2019

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

Вы можете использовать PROC APPEND.Если таблица BASE не существует, она создаст ее.В противном случае наблюдения добавляются.

proc append force base=final_table data=table&i;
run;

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

0 голосов
/ 04 апреля 2019

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

         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 table&i is not created*/
...