正如昆汀提到的,在看到一些樣本數據的時候很難說。我有點理解他們提到你需要創建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