【发布时间】:2017-03-03 10:33:44
【问题描述】:
我有两个包含数百万行的数据集。表 1 包含两个不同的 ID 号,ID1 和 ID2。它还包含一个变量,解释某个 ID 属于哪个组(变量 y1)。
第二个表 (Table2) 包含来自第一个表的两个变量和一个附加变量。
我想将这两个表连接在一起,但在连接之前,我希望 table1 只包含按 ID1 分组的信息,并且还希望它给我一个 ID 属于哪个组的信息。
我可以在两个 Proc Sql 阶段执行此操作,首先在 table1 上创建一个表,并按 ID1 分组,然后创建另一个步骤,将其合并到 table2。然而,这是相当低效的,因为我的表包含这么多行,因此我想一次性完成。因此,我创建了一个执行我想要的子查询。我的问题是我得到的错误是我无法从子查询中按变量“WhichGroup”分组,因为它源于聚合函数。我想知道我想要实现的目标是否有一些好的解决方法?
提前非常感谢!
示例代码:
data table1;
input ID1 $ ID2 $ x1 2. y1 $;
datalines;
1 p1 10 Group1
1 p2 20 Group2
2 p3 50 Group1
;
run;
data table2;
input ID1 $ x1 x2;
datalines;
1 10 500
1 20 600
2 50 700
;
run;
Proc sql;
Create table Test
as select
t1.WhichGroup
,sum(t1.Sum_x1) as Sum_x1
,sum(t2.x2) as Sum_x2
from (select
a.ID1
,case when max(case when a.y1 = 'Group1' then 1 else 0 end) = 0 then 'Group2'
when max(case when a.y1 = 'Group2' then 1 else 0 end) = 0 then 'Group1'
else 'Both' end as WhichGroup
,Sum(a.x1) as Sum_x1
from work.table1 as a
group by 1
) as t1
left join
work.table2 as t2
on t1.ID1 = t2.ID1
Group by 1;
Quit;
【问题讨论】:
标签: sas enterprise-guide