/***************************************************************************************************************** SAS file name: dynamic_lag.sas File location: __________________________________________________________________________________________________________________ Purpose: To demonstrate how to implement dynamic lagging in SAS with the hash object Author: Peter Clemmensen Creation Date: 07/01/2020 This program supports the blog post "A Dynamic Lag with the SAS Hash Object" on SASnrd.com *****************************************************************************************************************/ /* Example data */ data have; input id x; datalines; 1 1 1 2 1 3 2 4 2 5 2 6 ; /* Dynamic lag with hash object */ data want(drop=rc seq); if _N_=1 then do; declare hash h1 (); /* 1 */ h1.definekey('id'); h1.definedata('seq'); h1.definedone(); declare hash h2 (); /* 2 */ h2.definekey('id', 'seq'); h2.definedata('lagx'); h2.definedone(); end; set have; seq=0; lagx=.; /* 3 */ rc = h1.find(); /* 4 */ seq + 1; h1.replace(); h2.add(key : id, key : seq, data:x); /* 5 */ rc = h2.find(key : id, key : seq-2); /* 6 */ run;