SQL—如何将数据集分割输出(下)
情况一:单纯的将数据集分割成.del文件
/*cnt:分割后每个数据包需要有多少条数据;table:需要分割的数据集*/
%macro output_fenge(cnt,table);
proc sql;
/*i_count:需要分割的数据集的总数据量*/
select count(*) into:i_count from &table.;
quit;
/*做多少次循环,floor():向下取整*/
%do i=0 %to %sysfunc(floor(&i_count./&cnt.));
%let fst=%eval(1+&i.*&cnt.);
/*考虑当总数据量少于需要分割至每个数据包的行数情况*/
%let lst=%sysfunc(min(%eval((&i.+1)*&cnt.),&i_count));
%if &fst. <= &lst. %then %do;
data _null_;
/*注意:括号里没有逗号*/
set &table.(firstobs=&fst. obs=&lst.);
/*&filepath. 为输出文件存储路径,文件字段以逗号作为分隔符*/
file "&filepath.\filename_%eval(&i.+1).del" dlm=',' DROPOVER LRECL=32767;
put A B;
run;
%end;
%end;
%mend;