如何在 SAS 中将数据集拆分为一定数量的行?

How to split a dataset into a certain number of rows in SAS?

我有一个 SAS 数据集,我需要将其拆分为 200(或更少)的较小数据集。数据集的大小会有所不同,但始终适用最大行数 200 的规则。例如,数据集目前是637行,我想把这个数据集分成3组,每组200行,然后剩下的37行进入自己的数据集,创建4个数据集。

谁能想办法做到这一点?

数据集只有 3 列:ID、电子邮件和日期。

一种方法是通过宏。此代码会将所有数据集拆分为 evenly-spaced 数据。宏的参数是:

  • data:要拆分的数据集名称
  • out:输出数据集名称。将附加数字(例如 out1 out2)
  • max:最大观测值

代码:

%macro split(data=, out=out, max=);

    /* Get the number of observations */
    %let dsid = %sysfunc(open(&data.) );
    %let nobs = %sysfunc(attrn(&dsid., nlobs) );
    %let rc   = %sysfunc(close(&dsid.) );

    /* Calculate the total number of datasets needed */
    %let n_datasets = %sysevalf(&nobs./&max., ceil);

    %do i = 1 %to &n_datasets.;
        
        /* Calculate start/end observations */
        %let start = %sysevalf(&max*&i. - &max. + 1);
        %let end   = %sysevalf(&max.*&i.);
    
        data &out.&i.;
            set &data.(firstobs=&start. obs=&end.);
        run;

    %end;
%mend;

示例:

%split(data=sashelp.cars, out=cars, max=200);