SQL の初心者 - ファクト テーブル crselist を crseinfo テーブルに結合して、正しいディメンション情報を取得したいと考えています。私はいくつかの相関サブクエリに取り組んできましたが、望ましい結果が得られるものはありません(以下)。crseinfo テーブルによると、199610 年からアート 508 はカレッジ 09 に属し、200220 および 200300 で更新される OkArt と呼ばれる必要があります。crselist には、実際に教えられたコースがリストされています。
data crseinfo ;
input crsenme $ crsenum crsefx crsecollege $ crsedesc $9.;
cards;
ART 508 199610 09 OkArt
ART 508 200220 18 WowItsArt
ART 508 200300 18 SuperArt
;
run;
data crselist;
input crsenme $ crsenum term section $;
cards;
ART 508 199610 01
ART 508 199610 02
ART 508 199610 03
ART 508 199710 01
ART 508 200220 01
ART 508 200220 02
ART 508 201020 01
ART 508 201120 01
;
run;
望ましい結果は次のようになります。
data desired ;
input crsenme $ crsenum term section $ crsecollege $ crsedesc $9.;
cards;
ART 508 199610 01 09 OkArt
ART 508 199610 02 09 OkArt
ART 508 199610 03 09 OkArt
ART 508 199710 01 09 OkArt
ART 508 200220 01 18 WowItsArt
ART 508 200220 02 18 WowItsArt
ART 508 201020 01 18 SuperArt
ART 508 201120 01 18 SuperArt
;
SAS ヘルプ ページ ( http://web.utk.edu/sas/OnlineTutor/1.2/en/60477/m70/m70_52.htm ) を参照すると、次のようなことができるように思えます。
proc sql ;
select *
from crseinfo a, crselist b
where a.crsenme eq b.crsenme and
a.crsenum eq b.crsenum and
b.term eq (select min(c.term)
from crselist c
where c.term ge a.crsefx )
;
quit;
しかし、これはうまくいきません。SQL ベースのソリューションに興味があります。お時間をいただきありがとうございます。