我正在尝试在SAS EG中创建计算变量。
$elemMatch
数据想要:
ID TotalAmtVoucher TotalAmtCash TotalAmtCard
1 $ 50 $ 70 $ 70
这可能吗? 如果我缺少任何需要的细节,请告诉我。 非常感谢你!
答案 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;