Получите правильное значение как одну переменную в зависимости от условия - PullRequest
0 голосов
/ 15 ноября 2018

В основном я пытаюсь сказать: если на ключе есть совпадение, вставьте правильное (новое) значение в переменную в зависимости от даты.И если нет совпадения, тогда я хочу получить значение из старой таблицы. Ниже приведен пример кода:

    proc sql;
create table fly.Formulary2017
as select
d.corp_ent_cd
,d.groupno
,case when p.EffectiveDate > d.cvmo
        then d.old
when p.EffectiveDate <= d.cvmo
        then p.new
else d.old
        end as WANT
,d.Key1
from lib.dsl d FULL JOIN lib.post p
on d.Key1=p.Key1
;   
quit;

Так что совпадение не обязательно для каждого ключа.Для тех, где нет совпадений, я хочу старое значение.

1 Ответ

0 голосов
/ 15 ноября 2018

вам нужно включить логику совпадающих записей в ваш код, как показано ниже.Вот небольшой пример кода ниже.Вместо этого я назначил «новый» и «старый», вместо них можно использовать столбцы.

 /***partial code.***/

case when d.Key1 = p.Key1  and p.EffectiveDate > d.cvmo
    then "new"
when d.Key1 ne p.Key1
 then "old"
  when d.Key1 = p.Key1 and  p.EffectiveDate <= d.cvmo
    then "old"


 /*full code to try*/

 data post;
input key1 EffectiveDate:date9. ;
 format EffectiveDate date9.;
datalines;
10 10OCT2018 
11 22OCT2018 
12 27OCT2018
15 10NOV2018
16 22NOV2018
 17 27NOV2018
;

data dsl;
input key1 cvmo:date9. ;
format cvmo date9.;
datalines;
10 17OCT2018 
11 1OCT2018 
16 22NOV2018 
17 27NOV2018 
;

proc sql;
select
p.key1,
, case when d.Key1 = p.Key1  and p.EffectiveDate > d.cvmo
    then "new"
when d.Key1 ne p.Key1
 then "old"
  when d.Key1 = p.Key1 and  p.EffectiveDate <= d.cvmo
    then "old"
    end as WANT

from dsl d FULL JOIN post p
on d.Key1=p.Key1
 ;   
quit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...