2017-03-02 105 views
0

我想在SAS EG中創建計算變量。在SAS EG中有條件變量的變量

data data1; 
    input ID Type Payment_Amt; 
    cards; 
    1 Voucher $50 
    1 Cash $50 
    1 Cash $20 
    1 Card $20 
    1 Card $50 
; 

數據想:

  ID             TotalAmtVoucher               TotalAmtCash               TotalAmtCard
                                        $ 50                                           $ 70                                                       $ 70

這可能嗎? 請讓我知道,如果我缺乏任何細節需要。 非常感謝!

回答

1

您輸入的Payment_Amt的數據將成爲字符變量,前面帶有$。這將是非常尷尬的工作。我建議使用數字金額並使用dollar格式將它們顯示爲貨幣值。

然而,如果你的數據已經是字符格式,你可以將它們轉換爲數字有:

data data1; 
    set data1; 
    Payment_Amt2 = input(substr(Payment_Amt,2),best.); 

    format Payment_Amt2 dollar3.; 

    drop Payment_Amt; 
    rename Payment_Amt2 = Payment_Amt; 

運行;

這隻會使用substr()字符串中的$之後的值,然後使用input()函數將它們轉換爲數字值。

爲了讓您彙總可以使用proc sql,然後轉置數據:

proc sql; 
    create table want0 as 
    select distinct id, type, sum(payment_amt) as total 
    from data1 
    group by type; 
quit; 

proc transpose data = want0 out = want(drop = _name_) prefix = TotalAmt; 
    by id; 
    id type; 
run; 

proc sql步將通過聲明組總結特定type的所有值。然後,您可以使用proc transpose將數據轉換爲您想要的格式。使用prefix=選項可讓您在變量名稱中指定"TotalAmt"前綴。

0

如果類型的值是已知的,靜態的,很少有你可以做到以下幾點:

data data1; 
    input ID : 8. Type : $char10. Payment_Amt : dollar4.; 
    cards; 
1 Voucher $50 
1 Cash $50 
1 Cash $20 
1 Card $20 
1 Card $50 
2 Voucher $90 
2 Cash $30 
; 
run; 

proc sql; 
    create table data_want as 
    select ID, 
      sum(ifn(Type="Voucher",Payment_Amt,0)) as TotalAmtVoucher format=dollar4., 
      sum(ifn(Type="Cash",Payment_Amt,0))  as TotalAmtCash format=dollar4., 
      sum(ifn(Type="Card",Payment_Amt,0))  as TotalAmtCard format=dollar4. 
    from data1 
    group ID; 
quit;