我正在嘗試使用左連接來組合兩個表以進行協調,并且有兩個變數要用于匹配條件。但是,對匹配變數之一有額外的要求。如果第二個變數匹配,則從第二個表中提取該行,如果沒有,則將相應的第二個值作為缺失值,仍然從第二個表中提取其他變數。但是如果第二個變數不存在匹配項,我會得到缺失值。我知道這是自然的 sql 行為。但我只是想試試能不能做點什么。
這是一個示例代碼:
data a;
subj=1; dat="01jan2022"d; output;
subj=1; dat="01feb2022"d; output;
subj=1; dat="05mar2022"d; output;
subj=2; dat="10may2022"d; output;
subj=2; dat="11jun2022"d; output;
run;
data b;
subj=1; dat_new="01jan2022"d; other_var=1; output;
subj=1; dat_new="01feb2022"d; other_var=2; output;
subj=1; dat_new="05mar2022"d; other_var=3; output;
subj=2; dat_new=.; other_var=11; output;
subj=2; dat_new="11jun2022"d; other_var=21; output;
run;
proc sql;
create table ab_reconciliation
as
select a.subj, a.dat format=date9., b.dat_new format=date9., b.other_var
from a as t1
left join b as t2
on t1.subj=t2.subj
and dat=dat_new;
quit;
我得到的輸出

我想要的輸出

感謝你的幫助!
uj5u.com熱心網友回復:
您可能會考慮的一件事是按 ID 和 DATE 對觀察結果進行交錯處理,并僅使用來自 A 的日期的 OTHER_VAR 的最新值。
因此,如果您有此輸入資料:
data a;
input subj dat :date.;
format dat date9.;
cards;
1 01JAN2022
1 01FEB2022
1 05MAR2022
2 10MAY2022
2 11JUN2022
;
data b;
input subj dat_new :date. other_var;
format dat_new date9.;
cards;
1 01JAN2022 1
1 01FEB2022 2
1 05MAR2022 3
2 . 11
2 11JUN2022 21
;
你可以像這樣組合它們:
data want;
set b(in=inb rename=(dat_new=dat)) a(in=ina) ;
by subj dat;
if first.id then other=.;
if inb then other=other_var;
retain other;
if ina ;
drop other_var ;
rename other=other_var;
run;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492345.html
下一篇:具有多個一對多關系的復雜連接
