信用卡分类帐 - 为特定借记分配信用

时间:2017-09-02 01:07:22

标签: sas

受问题SAS iterative loops between two datasets的启发,假设我有信用卡借记交易(购买)和信用(付款)的数据集。我想创建一个具有运行余额(直接)的新数据集,并将每个信用分配给特定借记(最旧的借方尚未付清)。

借记数据如:

data debits;
  input customerID transactID Date mmddyy10. Amount;
  format Date mmddyy10.;
  cards;
1 101 01/01/2017 -10
1 102 02/01/2017 -50
2 103 01/01/2017 -10
2 104 02/01/2017 -50
3 105 01/01/2017 -10
3 106 02/01/2017 -50
4 107 01/01/2017 -10
4 108 02/01/2017 -50
;

信用数据如:

data credits;
  input customerID transactID Date mmddyy10. Amount;
  format Date mmddyy10.;
  cards;
1 201 01/15/2017 10
1 202 02/15/2017 50
2 203 02/15/2017 10
2 204 02/20/2017 50
3 205 04/01/2017 5
3 206 05/01/2017 20
3 207 06/01/2017 40
;

Toe获得运行余额,我可以通过customerID和Date交错它们:

data balance;
  set debits  
      credits 
  ;
  by customerID Date;

  if first.customerID then Balance=0;
  Balance++Amount;
run;

这使得:

customer    transact
   ID          ID             Date    Amount    Balance

    1          101      01/01/2017      -10       -10
    1          201      01/15/2017       10         0
    1          102      02/01/2017      -50       -50
    1          202      02/15/2017       50         0
    2          103      01/01/2017      -10       -10
    2          104      02/01/2017      -50       -60
    2          203      02/15/2017       10       -50
    2          204      02/20/2017       50         0
    3          105      01/01/2017      -10       -10
    3          106      02/01/2017      -50       -60
    3          205      04/01/2017        5       -55
    3          206      05/01/2017       20       -35
    3          207      06/01/2017       40         5
    4          107      01/01/2017      -10       -10
    4          108      02/01/2017      -50       -60

我想添加一个变量CreditedDebit。对于每个信用,CreditedDebit将是信用证所用的借方的transactID。对于具有未付余额的该客户的最旧借记交易,将应用贷记。所以我的WANT数据集是:

customer    transact
   ID          ID             Date    Amount    Balance    CreditedDebit

    1          101      01/01/2017      -10       -10      .
    1          201      01/15/2017       10         0      101
    1          102      02/01/2017      -50       -50      .
    1          202      02/15/2017       50         0      102
    2          103      01/01/2017      -10       -10      .
    2          104      02/01/2017      -50       -60      .
    2          203      02/15/2017       10       -50      103
    2          204      02/20/2017       50         0      104
    3          105      01/01/2017      -10       -10      .
    3          106      02/01/2017      -50       -60      .
    3          205      04/01/2017        5       -55      105
    3          206      05/01/2017        5       -50      105
    3          206      05/01/2017       15       -35      106
    3          207      06/01/2017       35         0      106
    4          107      01/01/2017      -10       -10      .
    4          108      02/01/2017      -50       -60      .

所需数据集显示信用201已应用于借方101,贷记202已应用于借方102等。请注意,某些借方是延迟支付的。一些学分可以应用于多个借记。 CustomerID = 3在5月1日支付20美元(交易206)。在那一天,借方105还剩下5美元,而借方106还剩下50美元。因此,交易206的WANT数据集中有两条记录,显示5美元适用于借方105,15美元适用于借方106。

我无法想出一种合理的方法将每个信用额与其应用的借方相关联。我正在思考像#"加载哈希表(或只是一个数组)以及CustomerID的所有借记,然后读取该CustomerID的每个信用,将每个信用应用于最旧的非零借方每次将贷记应用于借记时输出记录。"但我并不喜欢脑子里的伪代码。

0 个答案:

没有答案