簡體   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