SAS根据条件添加增量计数器

SAS adding an incremental counter based on a condition

我在 SAS 中有以下数据集

Id   date        order   amount
101  5/20/2020     1       25
101  5/20/2020     2       25
101  5/20/2020     3        0
101  5/21/2020     1       25
101  5/21/2020     2       25

我只需要根据“Id”、“日期”和“订单”添加一个 amount=25 的计数器

Id   date        order   amount  Ctr
101  5/20/2020     1       25   1
101  5/20/2020     2       25   2
101  5/20/2020     3        0   0
101  5/21/2020     1       25   1
101  5/21/2020     2       25   2

代码:

Data want:
Set have;
By id date order;
Ctr+1;
If first.id and first.date and first.order) and amount=25 then ctr=1;
Run;

我没有得到想要的结果。感谢任何帮助。

如果您出于某种原因无法利用订单变量,这可能会奏效。我怀疑如果你的案例变得更复杂,它可能会崩溃。

  • 在每个日期的第一天将计数器设置为 0 或 不是 25.
  • 否则,如果金额为 25,则增加计数器。
data have;
input Id $  date mmddyy10.       order   amount;
cards;
101  5/20/2020     1       25
101  5/20/2020     2       25
101  5/20/2020     3        0
101  5/21/2020     1       25
101  5/21/2020     2       25
;;;


data want;
set have;
by id date ;
if first.date or amount ne 25 then ctr=0;
if amount=25 then ctr+1;
run;

proc print data=want;
run;

结果:

Obs Id  date    order   amount  ctr
1   101 22055   1   25  1
2   101 22055   2   25  2
3   101 22055   3   0   0
4   101 22056   1   25  1
5   101 22056   2   25  2