我想将航空公司专栏分成两组然后 为所有客户添加每组的金额......: -
第1组= Air India&喷气式飞机 |第2组=其他。
Loc Client_Name Airlines Amout
BBI A_1ABC2 Air India 41302
BBI A 1ABC2 Air India 41302
MAA Th 1ABC2 Spice Jet Airlines 288713
HYD Ma 1ABC2 Jet Airways 365667
BOM Vi 1ABC2 Air India 552506
这样的事情: -
Rank Client_name Group1 Group2 Total
1 Ca 1ABC2 5266269 7040320 1230658
2 Ve 1ABC2 2815593 2675886 5491479
3 Ma 1ABC2 1286686 437843 1724529
4 Th 1ABC2 723268 701712 1424980
5 Ec 1ABC2 113517 627734 741251
6 A 1ABC2 152804 439381 592185
我先将它分组..但我对如何拆分感到困惑: -
Data assign6.Airlines_grouping1;
Set assign6.Airlines_grouping;
if Scan(Airlines,1) IN ('Air','Jet') then Group = "Group1";
else
if Scan(Airlines,1) Not in('Air','Jet') then Group = "Group2";
Run;
答案 0 :(得分:3)
您正在根据航空公司的第一个单词对行进行分类。
带有Proc TRANSPOSE
语句的 ID
是重塑数据的一种常用方法,以便分类值成为列。第二种方法是绕过分类并使用数据步骤直接生成新的数据形状。
以下是第二种方式的示例 - 创建新列group1和group2并根据航空公司标准设置值。
data airlines_group_amounts;
set airlines;
if scan (airlines,1) in ('Air', 'Jet') then
group1 = amount;
else
group2 = amount;
run;
总结客户
proc sql;
create table want as
select
client_name
, sum(group1) as group1
, sum(group2) as group2
, sum(amount) as total
from airlines_group_amounts
group by client_name
;
您可以避免这两个步骤并在单个查询中执行所有处理,或者您可以使用Proc MEANS
进行摘要
这是一种查询方式。
proc sql;
create table want as
select
client_name
, sum(case when scan (airlines,1) in ('Air', 'Jet') then amount else 0 end) as group1
, sum(case when scan (airlines,1) in ('Air', 'Jet') then 0 else amount end) as group2
, sum(amount) as total
from airlines
group by client_name
;