如何使用SAS中的Loops从一个表创建多个表?

时间:2016-09-19 14:31:42

标签: sas

我有一张表,其中包含从2016年8月1日到2016年8月30日的观察结果。 如何以下列方式创建12个表:

  1. 第一个包含从2016年8月1日至2016年8月20日的观察结果;
  2. 第二个包含自2016年8月1日至2016年8月21日的观察结果; ...
  3. 第12条包含自2016年8月1日至2016年8月30日的观察结果。
  4. 我认为使用循环更好,但不知道如何。

2 个答案:

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