Итак, вы хотите взять значение VARIABLE2 и использовать его, чтобы найти строку, в которой VARIABLE имеет то же значение?Поэтому, чтобы сделать это с помощью оператора MERGE, вы захотите объединить по значению VARIABLE2.
Итак, сначала отсортируйте данные по VARIABLE2.
proc sort data=example2;
by Variable2;
run;
Затем создайте версию, в которой есть только первые два столбца, но переименуйте их, чтобы столбец имени переменной совпадал, а имя столбца значения нене конфликтуйте.
proc sort data=example2 (keep=Value Variable rename=(Value=New Variable=Variable2))
out=example2b
;
by variable2;
run;
Теперь вы можете просто объединить две таблицы.Но вы хотите сохранить только исходный набор строк, поэтому используйте опцию IN = dataset.
data want ;
merge example2(in=in1) example2b;
by variable2;
if in1;
run;
Если вам нужен более эффективный метод, вы можете использовать объект HASH шага данных.Вы можете загрузить пары переменная / значение в хеш, а затем использовать метод FIND () для проверки значения, связанного с Variable2.Если найдено, скопируйте значение в новую переменную.Обратите внимание, что вам потребуется повторно найти значение, связанное с VARIABLE, так как предыдущий FIND () будет перезаписан VALUE.
data want ;
set example2;
if _n_=1 then do;
declare hash h(dataset: 'example2');
h.definekey('Variable');
h.definedata('Value');
h.definedone();
end;
if not h.find(key: Variable2) then new=value;
h.find();
run;