根据 Proc Sql ,SAS 中的条件将一列拆分为两列
Splitting a Column into two based on condtions in Proc Sql ,SAS
我想将航空公司列拆分为两组,然后
为所有客户添加每个组的金额...:-
第 1 组 = 印度航空公司和喷气航空公司
|第 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;
您正在根据航空公司的第一个词对一行进行分类。
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
;
我想将航空公司列拆分为两组,然后 为所有客户添加每个组的金额...:-
第 1 组 = 印度航空公司和喷气航空公司 |第 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;
您正在根据航空公司的第一个词对一行进行分类。
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
;