2016-09-19 84 views
0

我有一张表格,其中包含2016年8月1日至2016年8月30日期间的观察结果。 如何用以下方式创建12个表格:如何使用SAS中的循环在一个表中创建多个表?

  1. 第一个包含从2016年8月1日至2016年8月20日的观察结果;
  2. 第二个包含从2016年8月1日至2016年8月21日的观察结果; ...
  3. 第12个包含从2016年8月1日至2016年8月30日的观察结果。

我认为最好是使用循环,但不知道如何。

回答

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; 
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);