Как объединить два столбца из одной таблицы в другой критерий соответствия на основе таблицы в SAS - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь соединить столбцы «Тип2» и «Измерение2» из таблицы «Обновление» с таблицей «Есть». Я хочу, чтобы столбцы были выровнены там, где столбец «Тема1» в таблице «Имеет» соответствует столбцу «Тема2» в таблице «обновление», а столбец «Процедура1» в таблице «Имеет» соответствует столбцу «Процедура2» в таблице «Обновление». Спасибо заблаговременно.

data Have;
    input Subject1 Type1 :$12. Date1 &:anydtdte. Procedure1 :$12. Measurement1;
    format date yymmdd10.;
    datalines;

500   Initial    15 AUG 2017      Invasive    20 
500   Initial    15 AUG 2017     Surface      35   
428   Initial     3 JUL 2017     Outer        10 
765   Initial     20 JUL 2019     Other       19  
610   Initial     17 Mar 2018     Invasive    17 
;

data Update;
    input Subject2 Type2 :$12. Date2 &:anydtdte. Procedure2 :$12. Measurement2;
    format date yymmdd10.;
    datalines;

500   Followup   15 AUG 2018     Invasive     54 
428   Followup    15 AUG 2018      Outer      29 
765   Seventh     3 AUG 2018      Other       13 
500   Followup    3 JUL 2018      Surface     98 
610   Third       20 AUG 2019     Invasive    66  
;

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Объединение двух наборов данных на основе ключа (вашего субъекта и процедуры) выполняется с использованием MERGE в соответствии с группой переменных, названных в операторе BY. Для обоих наборов данных требуются одинаковые переменные BY.

Пример кода:

  • MERGE требуется отсортированные данные, поэтому это должно произойти в первую очередь.
  • Набор данных опция rename= используется для создания общих имен для оператора BY.
proc sort data=Have;    by Subject1 Procedure1;
proc sort data=Updates; by Subject2 Procedure2;

data combined;
  * trick: force these variables to be first two columns in output data set;
  retain subject procedure;

  merge
    have    (rename=(subject1=subject procedure1=procedure))
    updates (rename=(subject2=subject procedure2=procedure))
  ;
  by subject procedure;
run;

enter image description here

Пример данных:

data Have;
attrib
  Subject1 length=8
  Type1 length=$12
  Date1 informat=anydtdte. format=yymmdd10.
  Procedure1 length=$12
  Measurement1 length=8
;
input 
Subject1& Type1&   Date1&       Procedure1& Measurement1&; datalines;
500       Initial  15 AUG 2017  Invasive    20 
500       Initial  15 AUG 2017  Surface     35   
428       Initial   3 JUL 2017  Outer       10 
765       Initial  20 JUL 2019  Other       19  
610       Initial  17 Mar 2018  Invasive    17 
;

data Updates;
attrib
  Subject2 length=8
  Type2 length=$12
  Date2 informat=anydtdte. format=yymmdd10.
  Procedure2 length=$12
  Measurement2 length=8
;
input 
Subject2& Type2&    Date2&       Procedure2& Measurement2&; datalines;
500       Followup  15 AUG 2018  Invasive    54 
428       Followup  15 AUG 2018  Outer       29 
765       Seventh    3 AUG 2018  Other       13 
500       Followup   3 JUL 2018  Surface     98 
610       Third     20 AUG 2019  Invasive    66  
;
0 голосов
/ 07 апреля 2020

Вы просто ищете соединение между двумя таблицами ??

Select distinct have.*, update.type2, update.measurement2 
from have
left join update
on
have.subject1 = update.subject2
and have.procedure1 = update.procedure2
...