我正在构建代码,以导入最近30天的每日销售文件,然后替换主表中最近30天的记录。如果导入的每日文件有足够的记录,我只想替换最近30天:
proc sql;
select min(sale_date) into :oldestSale from daily_sales;
quit;
这是我要在SAS中构建的逻辑:
如果最旧的销售<(today()-30)然后 替换PROC SQL 其他 没做什么 结束
什么是最佳解决方案?这在我翻译的Python中是微不足道的,但是我在进行类似操作时仍受制于SAS语法...
答案 0 :(得分:2)
“逻辑”在细节上相当模糊,但要点似乎是
一种方法是拥有一个宏,该宏将有条件的删除/追加操作作为“替换”操作。
%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;