Любая помощь очень ценится. Спасибо
Я хотел бы создать пару переменных с моими транзакционными данными
Я пытаюсь создать переменные 'act_bal' и 'штраф', используя количество, тип и Op_Bal. У меня есть следующие правила:
- Для первой записи идентификатор будет иметь op_bal и будет
вычитается из «количества» для type = C и добавляется, если type = D для
рассчитать act_bal
- Для второй записи далее это act_bal + сумма для type = C и
act_bal-сумма для типа = D
- Я добавлю штраф 10, только если сумма> 4 и тип = D.
У идентификатора может быть только два штрафа.
- Общий штраф должен быть вычтен из act_bal последнего
запись, которая станет op_bal на следующий день. (например, для идентификатора
101, -178-20 = -198 станет op_bal для 2/4/2019)
Это данные, которые у меня есть для двух идентификаторов клиентов 101 и 102 для двух разных дат (Мой фактический набор данных содержит данные за все 30 дней).
id date amount type Op_Bal
101 4/1/2019 50 C 100
101 4/1/2019 25 D
101 4/1/2019 75 D
101 4/1/2019 3 D
101 4/1/2019 75 D
101 4/1/2019 75 D
101 4/2/2019 100 C
101 4/2/2019 125 D
101 4/2/2019 150 D
102 4/1/2019 50 C 125
102 4/1/2019 125 C
102 4/2/2019 250 D
102 4/2/2019 10 D
код, который я написал, выглядит так
data want;
set have;
by id date;
if first.id or first.date then do;
if first.id then do;
if type='C' then act_bal=Op_Bal - amount;
if type='D' then act_bal=Op_Bal + amount;
end;
else do;
retain act_bal;
if type='C' then act_bal=act_bal + amount;
if type='D' then act_bal=act_bal - amount;
if amount>4 and type='D' then do;
penalty=10;
end;
run;
Я не мог создать счетчик для контроля штрафов до 2 и не мог вычесть общую сумму штрафов из суммы последней строки. Может ли кто-нибудь помочь мне в получении желаемого результата? Спасибо
id date amount type Op_Bal act_bal penalty
101 4/1/2019 50 C 200 150 0
101 4/1/2019 25 D 125 0
101 4/1/2019 150 D -25 10
101 4/1/2019 75 D -100 10
101 4/1/2019 3 D -103 0
101 4/1/2019 75 D -178 0
101 4/2/2019 100 C -198 -98 0
101 4/2/2019 125 D -223 10
101 4/2/2019 150 D -373 10
102 4/1/2019 50 C 125 175 0
102 4/1/2019 125 C 300 0
102 4/2/2019 250 D 50 0
102 4/2/2019 10 D 40 0