Optimization 使用PROC OPTMODEL创建SAS表

Optimization 使用PROC OPTMODEL创建SAS表,optimization,sas,mathematical-optimization,minimization,Optimization,Sas,Mathematical Optimization,Minimization,我需要在SAS表中转换PROC OPTMODEL的输出 浏览internet时,我发现可以通过在中使用CREATEDATA语句来实现这一点 具体来说,我试图解决一个优化问题,目的是在两个约束条件下最小化波动性;示例脚本如下所示: proc optmodel;; /* let x1, x2, x3, x4 be the amount invested in each asset */ var x{1..&n.} >= 0; num coeff{1..&am

我需要在SAS表中转换PROC OPTMODEL的输出

浏览internet时,我发现可以通过在中使用CREATEDATA语句来实现这一点

具体来说,我试图解决一个优化问题,目的是在两个约束条件下最小化波动性;示例脚本如下所示:

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;
proc optmodel;;
/*设x1、x2、x3、x4为每项资产的投资金额*/
变量x{1..&n}>=0;
num coeff{1..&n.,1..&n.}=[&协方差矩阵];
numr{1..&n.}=[&return.];
/*最小化投资组合总回报的方差*/
最小化f=sum{i in 1..n.,j in 1..n.}coeff[i,j]*x[i]*x[j];
/*受以下限制*/
con预算:总和{i in 1..&n.}x[i]=&growth.*&预算。;
用自然语言处理;
从x创建数据权重;
/*打印最佳解决方案*/
打印x;
退出
我的目标是转换SAS表中的向量x,以便能够使用使波动性最小化的权重;日志窗口显示以下错误消息:

错误650-782:下标计数与数组“x”,2 NE 1不匹配

为什么我会犯这样的错误?有人能帮我解决吗

如果问题不清楚,请在下面的评论中给我发短信


提前谢谢大家

x
是从1到&n的变量向量。你需要循环每一个

create data weights from [i] = {1..&n}
    x[i]
;

我通过运行以下语句解决了这个问题:

从[n]x创建数据权重