Заранее извините за мой плохой английский.
Используя SAS, я пытаюсь подставить данные из одной таблицы, назовем это t1. Чтобы заменить, я сравниваю t1 столбец 1 и t2 столбец 1. Если у меня есть совпадение, я хотел бы использовать значение t2 столбца 2.
В таблице 1 много столбцов, и данные в соответствующем столбце могут повторяться. Таблица 2 имеет только два столбца, первый имеет только уникальные значения и будет сравниваться с таблицей 1. После этого я буду использовать значения второго столбца.
По какой-то причине я создаю декартово произведение.
proc sql;
create view
v1 as
select
t2.c2, (final result)
t1.c10, (not relevant to problem)
SUM(t1.c11) (not relevant to problem)
from
_outres.table1 t1
left join
_outres.table2 t2
on
t1.c1=t2.c1 (comparing the tables)
where
t1.c10= "criteria"
group by
t2.c2,
t1.c10
;run;quit;
Если бы это был Excel, я бы решил это так:
Table 1
column 1
A
A
A
B
B
C
C
Table 2
Column 1 column 2
A AA
B BB
C CC
= vlookup (таблица 1, столбец 1, таблица 2, 2, ложь)
Result:
Table 1
column 1
AA
AA
AA
BB
BB
CC
CC
------------------ РЕДАКТИРОВАНИЕ -----------------
@ DCR, это код, который я использовал для проверки на основе вашего ответа. Я внес небольшие изменения, чтобы лучше отражать мои данные и таблицы. Это сработало, как и ожидалось, но мне не удалось перевести это на исходный код.
data tttttt1;
input col1 $ col11 col10 $;
datalines;
A 10 critA
A 12 critA
A 13 critA
A 13 critB
B 11 critA
B 41 critA
B 19 critA
C 20 critA
C 55 critA
;
run;
data tttttt2;
input col1 $ col2 $ ;
datalines;
A AA
B BB
C CC
;
run;
proc sql noprint;
create table tttttt3 as
select b.col2, SUM(a.col11), a.col10
from (select * from tttttt1) as a
left join (select * from tttttt2) as b
on a.col1 = b.col1
where a.col10 = "critA"
group by b.col2, a.col10
;quit;
Ожидаемый и результат были одинаковыми:
AA 35 critA
BB 71 critA
CC 75 critA