我有一张表,其中包含从2016年8月1日到2016年8月30日的观察结果。 如何以下列方式创建12个表:
我认为使用循环更好,但不知道如何。
答案 0 :(得分:0)
这假设日期是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;
答案 1 :(得分:0)
使用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);