The variables in a BY statement form a hierarchy from left to right, with left being the most significant level.
This means that, when this is used:
by name date;
first.name = true (1) automatically implies first.date = true, but first.date can happen without first.name being true.
Which all means that you only have to use first.date as an indicator:
data nodups;
set data;
by name date;
if first.date;
run;
and, since all you want to do is restrict which observations reach the end of a data step iteration, you can use the Subsetting IF
... View more