SAS условно выполнить PROC SQL - PullRequest
0 голосов
/ 25 июня 2018

Я строю код, который импортирует ежедневный файл продаж за последние 30 дней, а затем заменяет последние 30 дней записей в основной таблице.Я хочу заменить только последние 30 дней, если в импортированном ежедневном файле достаточно записей:

proc sql;
select min(sale_date) into :oldestSale from daily_sales;
quit;

Вот логика, которую я хочу встроить в SAS:

ЕСЛИ старейшая продажа <(сегодня () - 30) ТОГДА ПРОЦЕСС SQL вместо ELSE ничего не делает КОНЕЦ </p>

Какое будет лучшее решение?Это тривиально в Python, с которого я перевожу это, но я застрял в синтаксисе SAS для выполнения чего-либо подобного ...

1 Ответ

0 голосов
/ 25 июня 2018

«Логика» довольно расплывчатая в деталях, но суть, по-видимому,

  • импорт ежедневных продаж
  • предполагает, что ежедневные продажи завершены, и каждая ежедневная продажа представлена ​​
  • если дата начала ежедневных продаж более 30 дней назад
    • удалить все продажи из основной таблицы с даты начала
    • добавить текущие ежедневные продажи

Один из подходов состоит в том, чтобы иметь макрос, который преобразует условное удаление / добавление как действие «замена».

%macro process_daily_sales;
  proc import … out=daily_sales;
  run;

  %local oldestSale;
  %let oldestSale = %sysfunc(today()); %* sentinel value just in case;

  proc sql;
    select min(sale_date) into :oldestSale from daily_sales;
  quit;

  %local gap;
  %let gap = %eval ( %sysfunc(today()) - &oldestSale );

  %if &gap > 30 %then %do;
    proc sql;
      delete from main_sales where sales_date >= &oldestSale;
    quit;
    proc append base=main_sales data=daily_sales;
    run;
  %end;
%mend;
...