Если я вас правильно понял, то, что вы ищете, находится внутри каждого идентификатора, который вы хотите пронумеровать только для первого экземпляра определенного продукта.
пожалуйста, не указывайте Клавиатуру и клавиатуру в ваших данных или в ваших данных, это может вызвать проблемы, если у вас есть данные в одинаковой форме, и вам нужно сделать это в одном значении, как клавиатуру или Клавиатуру, а не как
сначала создать набор данных
data have;
input ID PRODUCT $ SALETIME CAMPAIGN_FLAG;
datalines;
100 keyboard 201705 0
100 printer 201708 1
100 computer 201801 0
100 keyboard 201806 0
200 printer 201801 1
200 keyboard 201805 0
200 computer 201808 0
;
Затем сортируйте данные по идентификатору и продукту, это использует логику на следующих шагах, чтобы вы не учитывали один и тот же продукт снова с тем же идентификатором.
proc sort data=have out=have1 ;
by id product;
run;
data have2;
set have1 ;
by id product;
if first.product then num = 0;
else num=1;
run;
/ * затем сортируйте их обратно в данных как есть, используя id с saletime * /
proc sort data=have2 out=have3;
by id SALETIME;
run;
наконец примените логику
data want(drop =num);
set have3;
by id;
if first.id then count=0;
if CAMPAIGN_FLAG = 0 and num = 0
then count+1;
run;
proc print data = want;
бежать;