You can use lag in conditional statements lag but indeed it is tricky, either you populate the lagged var in another variable or use ifc/ifn
So your logic is correct and requires a very minor tweak as i mentioned, populate lagged var in another variable as illustrated below
DATA HAVE;
INFILE DATALINES DLM=' ';
LENGTH NAME $ 20;
INPUT NAME $ ID;
DATALINES;
ALEX 123456
ALEX 123456
ALEXANDER 123456
;
RUN;
DATA WANT;
SET HAVE;
temp=lag(name);
IF ID = LAG(ID)
AND NAME NE LAG(NAME)
THEN NAME =temp;
drop temp;
RUN;
or
DATA HAVE;
INFILE DATALINES DLM=' ';
LENGTH NAME $ 20;
INPUT NAME $ ID;
DATALINES;
ALEX 123456
ALEX 123456
ALEXANDER 123456
;
RUN;
DATA WANT;
SET HAVE;
name=ifc( ID = LAG(ID) and NAME NE LAG(NAME),lag(name),name);
RUN;
... View more