[英]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.