Мне нужно преобразовать вывод PROC OPTMODEL в таблицу SAS.
Просматривая Интернет, я обнаружил, что это можно сделать, используя оператор CREATE DATA в PROC OPTMODEL.
В частности, я пытаюсь решить проблему оптимизации, направленную на минимизацию волатильности при двух ограничениях; пример скрипта следующий:
proc optmodel;;
/* let x1, x2, x3, x4 be the amount invested in each asset */
var x{1..&n.} >= 0;
num coeff{1..&n., 1..&n.} = [&covariance_matrix.];
num r{1..&n.} = [&return.];
/* minimize the variance of the portfolio's total return */
minimize f = sum{i in 1..&n., j in 1..&n.}coeff[i,j]*x[i]*x[j];
/* subject to the following constraints */
con BUDGET: sum{i in 1..&n.}x[i] <= &budget.;
con GROWTH: sum{i in 1..&n.}r[i]*x[i] >= &growth. * &budget.;
solve with NLP;
create data weights from x;
/* print the optimal solution */
print x;
quit;
Я стремлюсь преобразовать вектор x в таблицу SAS, чтобы иметь возможность использовать веса, минимизирующие волатильность; в окне журнала отображается следующее сообщение об ошибке:
ОШИБКА 650–782: количество индексов не соответствует массиву «x», 2 NE 1.
Почему я получаю такую ошибку? Может ли кто-нибудь помочь мне найти решение?
Если вопрос не ясен, напишите мне в комментариях ниже.
Всем заранее спасибо!!
x
— вектор переменных от 1 до &n. Вам нужно пройтись по каждому из них.
create data weights from [i] = {1..&n}
x[i]
;
Я решил, выполнив следующий оператор:
create data weights from [n]x