SAS 有条件地执行 PROC SQL
SAS conditionally execute PROC SQL
我正在构建代码,导入过去 30 天的每日销售文件,然后在主 table 中替换最近 30 天的记录。如果导入的每日文件有足够的记录,我只想替换最近 30 天:
proc sql;
select min(sale_date) into :oldestSale from daily_sales;
quit;
这是我想在 SAS 中构建的逻辑:
IF oldestSale < (today() - 30) THEN
PROC SQL to replace
ELSE
do nothing
END
最好的解决方案是什么?这在 Python 中是微不足道的,我正在从中翻译它,但我坚持使用 SAS 语法来做类似的事情......
'logic'在细节上相当模糊,但大意似乎是
- 导入每日销售额
- 假设每日销售已完成并且每一天的销售都被代表
- 如果每日销售信息开始日期超过 30 天前
- 从开始日期
删除主要table的所有销售
- 追加当前每日销售额
一种方法是使用一个宏来执行条件 remove/append 作为 'replace' 操作。
%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;
我正在构建代码,导入过去 30 天的每日销售文件,然后在主 table 中替换最近 30 天的记录。如果导入的每日文件有足够的记录,我只想替换最近 30 天:
proc sql;
select min(sale_date) into :oldestSale from daily_sales;
quit;
这是我想在 SAS 中构建的逻辑:
IF oldestSale < (today() - 30) THEN PROC SQL to replace ELSE do nothing END
最好的解决方案是什么?这在 Python 中是微不足道的,我正在从中翻译它,但我坚持使用 SAS 语法来做类似的事情......
'logic'在细节上相当模糊,但大意似乎是
- 导入每日销售额
- 假设每日销售已完成并且每一天的销售都被代表
- 如果每日销售信息开始日期超过 30 天前
- 从开始日期 删除主要table的所有销售
- 追加当前每日销售额
一种方法是使用一个宏来执行条件 remove/append 作为 'replace' 操作。
%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;