У меня вопрос к экспертам PROC SQL. У меня есть этот код:
proc sql;
create table FinalData as
select *
,Sum(starting_year,year_diff) as colsum
,Price*(1+(SELECT Return from OtherData where Year=calculated colsum)) as PriceFinal
from MainData;
quit;
Очевидно, что ключевое слово calculated
не работает, я думаю, что для этого переменные должны быть в одном и том же списке. Я хочу иметь возможность вычислять и использовать colsum
в подзапросе в одном выражении sql. Я хочу избежать пересчета colsum
в каждом подзапросе, потому что в конечном итоге я буду использовать более сложные функции, которые могут замедлить код при каждом пересчете.
Я нашел этот вопрос, который кажется в значительной степени то же самое, но мне не удалось заставить код работать с этим ответом.
РЕДАКТИРОВАТЬ: немного изменил код.
На самом деле это должно было быть Year=calculated colsum
. OtherData — это в основном справочная таблица, где Year
не имеет дубликатов. Вот пример:
MainData OtherData
[Price] [starting_year] [year_diff] [Return] [Year]
5.00 2010 5 0.04 2015
2.33 2013 3 0.02 2016
4.51 2011 1 0.005 2017
0.1 2018
Там будут пропущенные значения, и это нормально. Я знаю, что это можно легко сделать с помощью нескольких операторов proc sql, но задача состоит в том, чтобы сделать это в одном. SUM
может быть любой другой функцией, которая генерирует выходные данные для поиска в OtherData.
Есть ли способ сделать это ?