此处以ADAE数据集作为示例:
方法一:lag
data adae1; set adam.adae; keep usubjid subjid aedecod aestdtc aeendtc aetoxgrn; proc sort; by usubjid aedecod aestdtc aeendtc aetoxgrn;run;data adae2; set adae1; by usubjid aedecod aestdtc aeendtc aetoxgrn; aeendtc_lst = lag (aeendtc); if first.aedecod then aeendtc_lst =''; proc sort; by usubjid aedecod descending aestdtc descending aeendtc;run;data adae3; set adae2; by usubjid aedecod descending aestdtc descending aeendtc; aestdtc_nxt = lag(aestdtc); if first.aedecod then aestdtc_nxt =''; proc sort; by usubjid aedecod aestdtc aeendtc aetoxgrn aeendtc_lst aestdtc_nxt;run;
方法二:retain
data adae1; set adam.adae; keep usubjid subjid aedecod aestdtc aeendtc aetoxgrn; proc sort; by usubjid aedecod aestdtc aeendtc aetoxgrn;run;data adae2; set adae1; by usubjid aedecod aestdtc aeendtc aetoxgrn; length aeendtc1 $20; retain aeendtc1; if first.aedecod then aeendtc1=''; if not first.aedecod then aeendtc_lst = aeendtc1; aeendtc1 = aeendtc; proc sort; by usubjid aedecod descending aestdtc descending aeendtc;run;data adae3; set adae2; by usubjid aedecod descending aestdtc descending aeendtc; length aestdtc1 $ 20; retain aestdtc1; if first.aedecod then aestdtc1 =''; if not first.aedecod then aestdtc_nxt = aestdtc1; aestdtc1 = aestdtc; drop aestdtc1 aeendtc1; proc sort; by usubjid aedecod aestdtc aeendtc aetoxgrn aeendtc_lst aestdtc_nxt;run;
方法三:双set
data adae1; set adam.adae; keep usubjid subjid aedecod aestdtc aeendtc aetoxgrn; proc sort; by usubjid aedecod aestdtc aeendtc aetoxgrn;run;data adae2; set adae1; by usubjid aedecod aestdtc aeendtc aetoxgrn; aeendtc_lst = lag (aeendtc); if first.aedecod then aeendtc_Ist ='';if not last.aedecod then do i = _n_+ 1; set adae1(keep = aestdtc rename = (aestdtc = aestdtc_nxt)) point = i; end; if last.aedecod then aestdtc_nxt = ''; proc sort; by usubjid aedecod aestdtc aeendtc;run;
领取专属 10元无门槛券
私享最新 技术干货