正如昆汀提到的,在看到一些样本数据的时候很难说。我有点理解他们提到你需要创建2个字段。如果,和一个巨大的IF,你的日期是一个SAS日期,那么你可以简单地做到这一点...
end_period = date + 1;
如果不是的话,我会建议一个号码或文字转换为SAS日期。
如果Count是不是在你的数据集,然后简单地分类和按组处理这样可以很容易地计算字段
data dsn_final;
set dsn_name;
by ID Date;
if first.ID then Count=1;
else Count+1;
run;
最后分解为单独的数据集。如果存在未知的最大数量...意味着您不知道数据集中任何ID的最大行数是否过大或可能更改,那么我建议使用宏创建单独的数据数据集。首先找到最大值并将其存储在一个宏变量中。然后将基于计数的数据集拆分为最大计数。
proc sql noprint;
select max(count)
into: max_count
from simulate;
quit;
%put &max_count.;
%macro datasets;
data %do count=1 %to &max_count;
date&count. (drop=count)
%end; ;
set simulate;
%do count=1 %to &max_count;
if count = &count. then output date&count.;
%end;
run;
%mend;
%datasets;
如果用数据的样本进行回应则有可能是更容易的方法,但我的理解,你需要计算2场,然后分裂。如果你知道最大值,分割将更容易。我只会使用宏,如果它是未知的或可能在未来使用和数据更改最大数量可能会改变。
所以这是一个展望未来的问题?你想计算end_period?我建议你展示你要开始的数据(用真实的实际值,而不是n + 1等),并显示你想创建的数据。听起来你可能想创建end_period变量,然后创建四个输出数据集? – Quentin