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
我在 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