Besoin d'aide pour obtenir ce côté logique. J'utilise deux champs dans une table.
DATE RATE 31DEC2014 0.1600 31DEC2015 0.1600 31DEC2016 0.1600 31DEC2017 0.1600 31DEC2018 0.1700 31DEC2019 0.1770
4 Réponses :
Ceci est plutôt compliqué dans ProC SQL. En tant que SELECT CODE>:
select t.*,
coalesce(t.rate, tt.rate) as imputed_rate
from t join
(select t.*
from t join
(select min(date) as min_date
from t t2
where rate is not null
) tt
on t.date = tt.min_date
) td;
Je n'aime pas utiliser proc SQL pour ce
Pour la complétude, voici une approche d'étape de données
data want(drop=r); do until (rate); set have; r = rate; end; do until (z); set have end=z; if rate = . then rate=r; output; end; run;
Vous pouvez effectuer une sous-requête corrélée pour obtenir le taux d'imputé code> comme numéro code> à partir de la date suivante Exemple: p> Données étendues pour inclure des groupes et plusieurs lacunes. P> Date code> avec un rapport
code>.
data have;
attrib date informat=date9. format=date9.;
input bankid date rate; datalines;
1 31DEC2014 .
1 31DEC2015 .
1 31DEC2016 .
1 31DEC2017 0.1600
1 31DEC2018 0.1700
1 31DEC2019 0.1770
1 31DEC2020 .
1 31DEC2021 0.1250
2 31DEC2014 0.1990
2 31DEC2015 .
2 31DEC2016 .
2 31DEC2017 .
2 31DEC2018 0.1700
2 31DEC2019 0.1770
2 31DEC2020 .
2 31DEC2021 0.1250
;
proc sql;
create table want as
select
have.*,
case
when not missing(rate) then rate
else (select rate from have as future
where
future.bankid = outer.bankid
and future.rate is not null
and future.date > outer.date
having future.date = min(future.date)
)
end as imputed_rate
from
have as outer
;
quit;