Your data are already sorted by id/date, so no active sorting is necessary. Instead interleave the data set through 2 mutually exclusive filters (amt>0 followed by amt=0),and keep the first record for each id/date combo.
data have;
input ID $ Date :date7. Amount : dollar10.2;
format amount dollar10. date date7.;
cards;
100 01Jan18 $1.00
100 01Jan18 $0.00
100 02Feb18 $1.00
200 01Jan18 $2.00
200 01Jan18 $0.00
200 01Jan18 $0.00
200 03Feb18 $1.00
200 03Feb18 $0.00
300 02Jan18 $0.00
300 02Jan18 $0.00
300 02Jan18 $0.00
300 02Jan18 $0.00
;
data want;
set have (where=(amount>0)) have (where=(amount=0));
by id date;
if first.date;
run;
... View more