我有一张表格,其中包含2016年8月1日至2016年8月30日期间的观察结果。 如何用以下方式创建12个表格:如何使用SAS中的循环在一个表中创建多个表?
- 第一个包含从2016年8月1日至2016年8月20日的观察结果;
- 第二个包含从2016年8月1日至2016年8月21日的观察结果; ...
- 第12个包含从2016年8月1日至2016年8月30日的观察结果。
我认为最好是使用循环,但不知道如何。
我有一张表格,其中包含2016年8月1日至2016年8月30日期间的观察结果。 如何用以下方式创建12个表格:如何使用SAS中的循环在一个表中创建多个表?
我认为最好是使用循环,但不知道如何。
这里假定日期是SAS日期格式。如果日期是字符格式,则可以使用字符比较。
执行输出语句后,数据向量仍包含观察值。因此,只要条件成立,数据步骤就会将相同的观察结果写入多个数据集。另外,如果您需要12个数据集,我认为您需要日期比较直到8月31日。
data want1 want2 want3 ... want12;
set have;
if date <= '20AUG2016'd then output want1;
if date <= '21AUG2016'd then output want2;
if date <= '22AUG2016'd then output want3;
.
.
.
if date <= '31AUG2016'd then output want12;
run;
使用WHERE语句比创建单独的表可能更好。但是要做到没有硬编码,你需要使用代码生成。这通常使用宏逻辑来完成。
%macro split(start,stop);
%local i n;
%let n=%sysfunc(intck(day,&start,&stop));
%let n=%eval(&n+1);
DATA
%do i=1 %to &n;
WANT&i
%end;
;
set have ;
%do i=1 %to &n ;
if date <= %sysfunc(intnx(day,&start,&i-1)) then output WANT&i ;
%end;
run;
%mend split;
%split('20AUG2016'd,'31AUG2016'd);