И так правильный ответ:
Дело в том, что при значение amount отсутствует в таблице B.
При написании set a b сначала считываются все данные из таблицы A, затем все данные из таблицы B, т.е. происходит конкатинация данных.
В нашем случае вектор PDV (Program Data Vector) будет выглядеть следущим образом, когда начнет читать данные из таблицы B:
до прохода data step:
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | . | . |
далее после считывания первых значений из таблицы B:
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | 1001 | . |
после прохода всего шага:
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | 1001 | 3 |
Следущий круг цыкла:
до прохода data step:
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | 1001 | 3 |
После прохода считывания данных из таблицы B:
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | 1003 | 3 |
Прошу обратить внимания, что на этом этапе значение amount не перетелось.
_N_ | _ERROR_ | ID | AMOUNT |
3 | 0 | 1003 | 3 |
Вот таким образом мы получили заполненные занчения amount даже у тех ID из таблицы B, которые не соответсвовали условию IF.
P.S.
Решить данную проблему можно просто добавив мустой столбец amount в таблицу B.
После этого все будет работать корректно.