全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4064 10
2011-10-25
悬赏 100 个论坛币 已解决
我现在想用SAS调用Barra Optimizer(一个优化软件),求解最优化的问题
Barra Optimizer提供了Java的接口,而SAS支持调用JavaObj来访问Java的类库

SAS调用JavaObj的基本要求是所有东西在一个data步里完成;而SAS的Obj使用Barra Optimizer要先初始化一些对象,比如一个相关系数矩阵,它提供的对象方法是一行一行的输入。综合上述两点,一个示例语句如下所示:
data _null_;
...
declare javaobj rm('com/barra/optimizerSAS/CRiskModelSAS',objID);  /* 创建了一个风险模型对象,里面有设置相关系数的方法 */
rm.callVoidMethod('SetFactorCovariance','FactorA','FactorB',0.618);  /* 开始一行行的赋值 */
...

run;

现在我的问题是如何从一张相关系数表中一行行的取出'FactorA','FactorB',cov的数据,然后写出一行行如上所示的代码。关键的难点还在于这些东西要在一个data步里完成。

我想过在这个data步之外用sql的select into取一行数据,再写出一行代码,再赋给一个宏变量,再到data步里运行下这个宏变量,但如果有个几千行,就要有几千个宏变量,不太实际也太麻烦。

请高手指教。

最佳答案

HaricH 查看完整内容

定义hash对象,将系数表存入hash对象。然后在data步里面用键值查找。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-10-25 10:35:02
定义hash对象,将系数表存入hash对象。然后在data步里面用键值查找。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-25 10:44:59
我还想过用call execute的方法,在data步里调用过程步或是一个宏。

我先建了一个宏,大致如下所示:
%macro ab();
%do i=1 to n;
proc sql noprint;
select factora,factorb,cov into :fa,:fb,:cov from covchart where _n_=&i;
quit;
rm.callVoidMethod('SetFactorCovariance',"&fa","&fb",&cov);
%mend;

然后在data步中加上
call execute('%ab');

问题是SAS不认 rm.callVoidMethod('SetFactorCovariance',"&fa","&fb",&cov); 这一句
错误报告如下:
ERROR 180-322: Statement is not valid or it is used out of proper order.

我在官网上看到说call execute中要是直接调用宏,就立即执行宏,所以可能这行语句不在data步里执行,所以没法识别这是给一个Java对象的方法赋初值。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-25 11:01:21
还有一个最简单的方法,可在data步里调用宏,而这个宏里面就是简单的一行行的赋值语句,如下所示:

%macro ab();
rm.callVoidMethod('SetFactorCovariance', 'GEMM_SIZE', 'GEMM_SIZE', 6.485/10000);
rm.callVoidMethod('SetFactorCovariance', 'GEMM_SUCCESS', 'GEMM_SUCCESS', 1.899/10000);
rm.callVoidMethod('SetFactorCovariance', 'GEMM_SUCCESS', 'GEMM_SIZE', 2.308/10000);
...
%mend;

这样的话,我的问题就简化成为了如何写一个宏,来自动生成上面所示的宏?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-25 13:48:47
SAS, MATLAB, and R Interface Guide
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-25 14:40:35
kuhasu 发表于 2011-10-25 13:48
SAS, MATLAB, and R Interface Guide
这篇文档我看过,里面关于SAS的sample例子中只是4个asset
我的portfolio里有很多asset
所以不可能用那个例子里一行行手输的方法
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群