SAS: объединение двух наборов данных с одной и той же переменной под другим именем - PullRequest
0 голосов
/ 04 мая 2018

Я пытался найти этот вопрос, но не думаю, что он задавался раньше.

Я работаю над сопоставлением конкретных клиентов по двум наборам данных. В обоих наборах данных есть одна переменная, которая имеет уникальный идентификатор для каждого клиента, и этот уникальный идентификатор одинаков для каждого клиента в обоих наборах данных.

Проблема в том, что имя переменной для этого уникального идентификатора отличается в обоих наборах данных, и поэтому я не уверен, как мне их объединить?

Любая помощь будет оценена!

Спасибо

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Если вы хотите сохранить другое имя переменной для идентификатора, используйте sas proc sql.

    proc sql;
        create table mergeddata as 
        select a.*, b.* from mydata1 as a full join
        my data2 as b on a.someid1=b.someid2;
    quit;

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

0 голосов
/ 08 мая 2018

Переименуйте один из идентификаторов в соответствии с другим (rename=(id2=id)) Полный пример ниже:

Создание фиктивных данных:

data t1; 
input id  Name $; 
cards; 
1 John
2 Jack
; 
run; 

data t2; 
input id2  title $; 
cards; 
1 Manager
2 Admin
3 Helpdesk
; 
run;

Переименуйте ID2 в ID, затем выполните объединение:

data megered;
merge 
    t1
    t2 (rename=(id2=id))
    ;
by id;
run;

Выход:

 id=1 Name=John title=Manager
 id=2 Name=Jack title=Admin 
 id=3 Name=  title=Helpdesk
0 голосов
/ 04 мая 2018

Используйте параметр набора данных rename= в одном или обоих наборах объединенных данных до тех пор, пока переменные с ключевым значением не будут иметь одно и то же имя переменной.

data one;
  do id = 1 to 10;
    x = id;
    if mod(id,3)=0 then output;
  end;
run;

data two;
  do myid = 1 to 10;
    if mod(myid,2)=0 or myid > 7 then output;
  end;
run;

data want;
  merge
    one
    two (rename=(myid=id))
  ;
  by id;
run;

data want;
  merge
    one (rename=(id=commonid))
    two (rename=(myid=commonid))
  ;
  by commonid;
run;
...