总和变量有条件地在SAS EG中

时间:2017-03-02 07:52:41

标签: sas

我正在尝试在SAS EG中创建计算变量。

$elemMatch

数据想要:

  

ID TotalAmtVoucher TotalAmtCash TotalAmtCard
  1 $ 50 $ 70 $ 70

这可能吗? 如果我缺少任何需要的细节,请告诉我。 非常感谢你!

2 个答案:

答案 0 :(得分: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步骤将通过group by语句对特定type的所有值求和。然后,您可以使用proc transpose将数据转换为所需的格式。使用prefix=选项可以在变量名中指定"TotalAmt"前缀。

答案 1 :(得分: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;