Я хочу использовать набор данных B, чтобы перезаписать некоторые значения в наборе данных A путем слияния набора данных A & B с идентификатором слияния. Однако он не работает должным образом. Вот тест я сделал:SAS объединяет наборы данных для перезаписывания значений
/* create table A */
data a;
infile datalines;
input id1 $ id2 $ var1;
datalines;
1 a 10
1 b 10
2 a 10
2 b 10
;
run;
/* create table B */
data b;
infile datalines;
input id1 $ var1 var2;
datalines;
1 20 30
2 20 30
;
run;
/* merge A&B to overwrite var1 in table A using values in table B */
data c;
merge a b;
by id1;
run;
Таблица C выглядит следующим образом:
ID1 ID2 VAR1 VAR2
1 a 20 30
1 b 10 30
2 a 20 30
2 b 10 30
Почему 10s в строке 2 & 4 не заменяются на 20 из таблицы B? Пока var2 работает так, как ожидалось?
Я знаю, что могу сделать это просто с помощью proc SQL, и это то, что я сделал для решения проблемы. Но мне все еще очень интересно, есть ли способ сделать то, что я хотел использовать слияние? И почему это не работает? Я предпочитаю слияние с SQL в этом случае, потому что логика проще реализовать (я считаю, что это не работает должным образом).
Я использую SAS 9.4.
У вас есть повторяющиеся значения 'id1' в таблице A. Я думаю, что нет никакого подхода simpe, используя любое слияние/обновление/изменение для достижения этого. – Lovnlust
Не используйте фрагменты кода с чем-либо, кроме языков, с которыми они явно работают (в основном, html/javascript/etc.). – Joe
Также уместно (но не точное дублирование), http://stackoverflow.com/questions/25251177/when-using-multiple-datasets-in-a-set-or-a-merge-with-duplicate-by-values -почему-д – Joe