繁体   English   中英

使用 SAS 中的 PROC SQL 查询财务余额?

[英]Query for a financial balance with a PROC SQL in SAS?

我有两张表,先叫它“交易”

交易编号 交易类型 数量
101 1 50.00
102 2 25.00
103 3 35.00
104 2 15.00
105 1 60.00

第二个叫它“transaction_types”

ID 描述
1 订金
2 退休
3 内部事务

“transaction_types”表中的“id”列,对应第一个表中的“transsaction_id”

假设初始余额为 100,000.00 美元。 我应该写一个查询来获取历史账户余额。 我应该展示的表格是这样的:

交易编号 初始余额 订金 退出 最终平衡
101 100000 50.00 100050
102 100050 25.00 100025
103 100025 100025
... ... ... ... ...

我使用 PROC SQL 在 SAS 中编写此代码:

TITLE "Balance Historico de la Wallet Empresarial";
PROC SQL;
    SELECT transaction_id,
           100000 AS initial_balance FORMAT=DOLLAR32.2,
           "" AS deposit,
           "" AS withdrawal,
           "" AS final_balance
    FROM _LIB.TRANSACTIONS;
QUIT;

但我不知道如何填充其他列。

考虑条件聚合,您有条件地分配新列,然后按需要的分组进行聚合。 使用calculated子句完成所需的最终余额算法。

TITLE "Balance Historico de la Wallet Empresarial"; 

PROC SQL; 
   SELECT transaction_id
        , initial_balance FORMAT=DOLLAR32.2
        , SUM(deposit) AS deposit FORMAT=DOLLAR32.2
        , SUM(withdrawal) AS withdrawal FORMAT=DOLLAR32.2
        , initial_balance + 
          calculated deposit - 
          calculated withdrawal AS final_balance FORMAT=DOLLAR32.2
  FROM 
   (SELECT ts.transaction_id
         , 100000 AS initial_balance
         , CASE WHEN tt.description = 'Deposit' THEN ts.amount ELSE NULL END AS deposit
         , CASE WHEN tt.description = 'Withdrawal' THEN ts.amount ELSE NULL END AS withdrawal
         , CASE WHEN tt.description = 'Inner_balance' THEN ts.amount ELSE NULL END AS inner_balance
    FROM _LIB.TRANSACTIONS ts
    INNER JOIN _LIB.TRANSACTION_TYPES tt
       ON ts.transaction_type = tt.id
   ) sub
  GROUP BY transaction_id
         , initial_balance;
QUIT; 

或者,使用 SAS SQL 方言,将IFN用于稍微短一些的语法:

  ...
  , IFN(tt.description = 'Deposit', ts.amount, .) AS deposit
  , IFN(tt.description = 'Withdrawal', ts.amount, .) AS withdrawal
  , IFN(tt.description = 'Inner_balance', ts.amount, .) AS inner_balance
  ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM