数百万行のデータセットが2つあります。表1には、ID1とID2という2つの異なるID番号が含まれています。また、特定のIDが属するグループ(変数y1)を説明する変数も含まれています。Proc sql - メインクエリのサブクエリからの集計関数によるグループ化
第2のテーブル(表2)には、第1のテーブルの2つの変数と、追加の1つの変数が含まれています。
2つのテーブルを一緒に結合したいが、結合の前に、table1にID1でグループ化された情報だけが含まれていて、IDが属するグループの情報が表示されるようにしたい。
2つのProc SQLステージでこれを行うことができます。ここでは、まずID1でグループ化したtable1にテーブルを作成し、次にtable2にマージする別のステップを作成します。しかし、これは私のテーブルには非常に多くの行が含まれているため、1回の実行でそれをやりたいのではなく、むしろ非効率です。したがって私は代わりに私が望むことをするサブクエリを作成しました。私の問題は、サブクエリの変数 "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;