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