需要将未知数量的数据集设置在一起



我有一个创建多个数据集的宏。数据集的数量取决于其他因素,可能为0-X。我需要将所有这些数据集一起设置为一个要导出的数据集。

%macro runpromo(setid=, title=, start=, end=, no=);
%get_offer_data(label=&title , start=date &start, end=date &end, rc=%quote(&setid), source=1);
data promo&no.;
length item_desc $50.0;
set edw_final;
run;
%mend runpromo;
data _null_;
set macros;
call execute('%runpromo(setid='||code||',title='||promo_title||',start ='||start_date||',end='||end_date||',no='||count||');');
run;

data all_promos;
length item_desc $50.0;
set promo1-promoX;
run;

我想让这些代码每天自动运行,这样我就不想每次都要更新数据集名称。

使用命名约定,其中每个数据集都有相同的前缀并指向单个库。然后你可以很容易地将它们堆叠在最后:

data want;
set prom:;
run;

冒号(:(充当通配符,工作库中前缀为prom的所有数据集都将合并。

为什么不一边构建更大的数据集呢?

宏定义:

%macro runpromo(setid=, title=, start=, end=, no=);
%get_offer_data(label=&title,start=date &start,end=date &end,rc=%quote(&setid),source=1);
data promo_fix;
length item_desc $50;
set edw_final;
run;
proc append base=all_promos data=promo_fix force;
run;
%mend runpromo;

程序:

proc delete data=all_promos;
run;
data _null_;
set macros;
call execute(cats('%nrstr(%runpromo)'
,'(setid=',code
,',title=',promo_title
,',start =',start_date
,',end=',end_date
,',no=',count
,');'
));
run;

最新更新