将大型SAS数据集拆分为较小的数据集

use*_*280 5 macros split sas

我需要一些帮助,将大型SAS数据集拆分为较小的数据集.

每个月我都会有一个包含几百万条记录的数据集.这个数字每个月都有所不同.我需要将此数据集拆分为多个较小的数据集,每个数据集包含250,000条记录.例如,如果我在原始数据集中有1,050,000条记录,那么我需要最终结果是包含250,000条记录的4个数据集和包含50,000条记录的1个数据集.

从我一直看来,它似乎需要使用宏.不幸的是,我对SAS很熟悉(不熟悉使用宏)并且没有太多时间来完成这项工作.任何帮助将不胜感激.

小智 4

根据乔的回答,也许你可以尝试这样的事情:

%MACRO SPLIT(DATASET);

%LET DATASET_ID = %SYSFUNC(OPEN(&DATASET.));
%LET NOBS = %SYSFUNC(ATTRN(&DATASET__ID., NLOBS));
%LET NB_DATASETS = %SYSEVALF(&NOBS. / 250000, CEIL);

DATA 
  %DO I=1 %TO &NB_DATASETS.;
    WANT&I. 
  %END;;

  SET WANT;

  %DO I=1 %TO &NB_DATASETS.;

    %IF &I. > 1 %THEN %DO; ELSE %END; IF _N_ LE 2.5E5 * &I. THEN OUTPUT WANT&I.;

  %END;
RUN;
%MEND SPLIT;    
Run Code Online (Sandbox Code Playgroud)

  • 由于我的编辑未获批准对答案进行过多更改,因此我想在此指出需要进行一些小的改进/更正:1)最好也关闭数据集以防止它稍后锁定。2)设定需求;应该是设置&数据集;3)(很高兴拥有)每个数据集的 obs 数量和这些新数据集的名称都可以是额外的宏参数。 (2认同)