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