SAS EG中的有条件求和变量

SAS EG中的有条件求和变量,sas,Sas,我试图在SAS中创建计算变量 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 1$50$70$70 这可能吗? 如果我缺少任何需要的细节,请告诉我。 多谢各位 付款金额的输入数

我试图在SAS中创建计算变量

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
1$50$70$70

这可能吗? 如果我缺少任何需要的细节,请告诉我。
多谢各位

付款金额的输入数据将是一个字符变量,前面有一个
$
。这将是非常尴尬的工作。我建议使用数字金额并使用
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语句对特定
类型的所有值求和。然后,您可以使用
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;