在SAS EG中有条件变量的变量

问题描述:

我想在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

这可能吗? 请让我知道,如果我缺乏任何细节需要。 非常感谢!

您输入的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"前缀。

如果类型的值是已知的,静态的,很少有你可以做到以下几点:

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;