Как сохранить последнее значение в новом столбце - PullRequest
0 голосов
/ 18 апреля 2019

SAS Help: У меня есть следующая таблица: я хочу, чтобы последнее значение в столбце impdate заполнило столбец dataIwant для id1.id2 просто показывает, что id1 может быть связан с несколькими id2, создавая несколько строк.

Я попытался отсортировать данные по id1, дате, а затем с помощью оператора сохранения, который не работал.

data want;
date have;
by id1 date;
retain dataiwant;
if impdate then do;
dataiwant = impdate;
end;
else do;
if missing(impdate) then do;
impdate = dataiwant;
end;date    id1 id2 impdate

Данные, которые у меня есть:

date        id1 id2 impdate
31Dec2018   1   7A  31Aug2017
31Dec2018   1   8A  31Aug2017
31Dec2018   1   9A  31Aug2017
31Jan2019   1   7A  31Aug2017
31Jan2019   1   8A  31Aug2017
31Jan2019   1   9A  31Aug2017
28Feb2019   1   7A  1Mar2019
28Feb2019   1   8A  1Mar2019
28Feb2019   1   9A  1Mar2019
31Dec2018   2   81A 9Sep2018
31Dec2018   2   82B 9Sep2018
31Jan2019   2   81A 9Sep2018
31Jan2019   2   82B 9Sep2018
28Feb2019   2   81A 1Feb2019
28Feb2019   2   82B 1Feb2019
31Jan2019   3   66A .
31Jan2019   3   66B .
28Feb2019   3   66A .
28Feb2019   3   66B .

Данные, которые я хочу:

date        id1 id2 impdate     DataIwant
31Dec2018   1   7A  31Aug2017   1Mar2019
31Dec2018   1   8A  31Aug2017   1Mar2019
31Dec2018   1   9A  31Aug2017   1Mar2019
31Jan2019   1   7A  31Aug2017   1Mar2019
31Jan2019   1   8A  31Aug2017   1Mar2019
31Jan2019   1   9A  31Aug2017   1Mar2019
28Feb2019   1   7A  1Mar2019    1Mar2019
28Feb2019   1   8A  1Mar2019    1Mar2019
28Feb2019   1   9A  1Mar2019    1Mar2019
31Dec2018   2   81A 9Sep2018    1Feb2019
31Dec2018   2   82B 9Sep2018    1Feb2019
31Jan2019   2   81A 9Sep2018    1Feb2019
31Jan2019   2   82B 9Sep2018    1Feb2019
28Feb2019   2   81A 1Feb2019    1Feb2019
28Feb2019   2   82B 1Feb2019    1Feb2019
31Jan2019   3   66A .   .
31Jan2019   3   66B .   .
28Feb2019   3   66A .   .
28Feb2019   3   66B .   .

1 Ответ

0 голосов
/ 18 апреля 2019

Это должно быть простое объединение с той же таблицей на основе столбца id1

data have;
input date date9. id1 id2$ impdate date9.;
format date impdate date9.;
datalines;
31Dec2018 1 7A 31Aug2017 
31Dec2018 1 8A 31Aug2017 
31Dec2018 1 9A 31Aug2017 
31Jan2019 1 7A 31Aug2017 
31Jan2019 1 8A 31Aug2017 
31Jan2019 1 9A 31Aug2017 
28Feb2019 1 7A 1Mar2019 
28Feb2019 1 8A 1Mar2019 
28Feb2019 1 9A 1Mar2019 
31Dec2018 2 81A 9Sep2018 
31Dec2018 2 82B 9Sep2018 
31Jan2019 2 81A 9Sep2018 
31Jan2019 2 82B 9Sep2018 
28Feb2019 2 81A 1Feb2019 
28Feb2019 2 82B 1Feb2019 
31Jan2019 3 66A . 
31Jan2019 3 66B . 
28Feb2019 3 66A . 
28Feb2019 3 66B .
;
run;

proc sql;
select a.*,b.dateiwant
from have a
left join (select id1,
                  max(impdate) as dateiwant format=date9.
             from have 
             group by id1) b
on a.id1=b.id1;
quit;
...