如何在 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);
我有一个 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);