【问题标题】:Create SAS table using PROC OPTMODEL使用 PROC OPTMODEL 创建 SAS 表
【发布时间】:2020-12-13 07:09:43
【问题描述】:

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

在互联网上浏览,我发现可以通过使用 PROC OPTMODEL 中的 CREATE DATA 语句来做到这一点。

具体来说,我正在尝试解决一个优化问题,旨在最小化两个约束下的波动性;示例脚本如下:

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;

我的目标是在 SAS 表中转换向量 x,以便能够使用最小化波动性的权重;日志窗口显示以下错误消息:

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

为什么我会收到这样的错误?有人可以帮我解决吗?

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

提前谢谢大家!!

【问题讨论】:

    标签: optimization sas mathematical-optimization minimization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我通过运行以下语句解决了:

      create data weights from [n]x

      【讨论】:

        猜你喜欢
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多