全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4285 11
2008-03-18


data in_nlp4(type=est);/*用inest产生数据集*/
input _type_ $8. x1-x8 _rhs_;
cards;
parms    .125  .125  .125  .125  .125  .125  .125  .125  .
lowerbd  0  0  0  0  0  0  0  0  .
upperbd  1  1  1  1  1  1  1  1  .
eq       1  1  1  1  1  1  1  1  1
ge       0.0246951391  0.0127497123  0.0124444582 0.0079714507  0.0216395959  0.0067692931   0.0263324389   0.0143749164  0.019
;

------------------------
data quad;
set cov_out4 in_nlp4;/*cov为变量协方差矩阵*/
proc nlp  inquad=quad outest=nlp_out6;
min;
parms x1-x8;
run;

--------------------------------------------------------

问题:此为用MV模型求解投资组合的一段程序。见(朱老师书籍P179)。这段程序只能一次求解一个期望值。我的目的是想建立一个宏函数,可以处理一组期望收益,如:0.008,0.01,0.012.然后得到对应的目标函数序列。

我正在学习SAS中,自己也在调试。

希望有大侠帮我指点下。。。。

个人奖励1000论坛币。不多,只是一点劳动补偿。

二维码

扫码加我 拉你入群

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

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

全部回复
2008-3-18 16:40:00

你想变动哪个数, parm 吗? 我对MV模型不熟悉,不太清楚你的问题的背景,否则我可以帮你用宏实现的

二维码

扫码加我 拉你入群

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

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

2008-3-18 17:18:00

不好意思  是我没有说清楚。

我想变动的参数是 ge 的约束条件,以及最后非线性后处理得到最优化的值。

如不是用宏处理的话,我要这样计算每一个值,比较烦琐:

data quad1;

set quad;

if _type_ = "ge" then _rhs_ =0.02 ;(上面的是0.019)

proc nlp inquad=quad1 outset=nlp_out7;

min;

parms x1-x8;

run;

然后又要从nlp-out7提取目标函数。

我的想法其实就是直接建立宏,或者其他可行的方法。一次计算所有的值,得到相应的目标值。

二维码

扫码加我 拉你入群

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

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

2008-3-18 17:38:00

这个不难,首先你在宏定义外面建好你要参数表,ge行的_rhs_可以留空.

然后这样.

%macro main(start,end,increment);

   %let i=&start.;

   %do  %while(&i.<=&end.);

data temp;

 set quad;

 if _type_=’ge’ then _rhs_=&i.;

 run;

proc nlp inquad=quad outest=nlp_out;

 min;

 parms x1-x8;

run;

data function;  ge=&i.;

set nlp_out(where=(_type_=’OBJ’) keep=value);

 keep ge value; run;

/*就是取出目标函数值,不一定是OBJ,可能是其他,具体可以查一查

value 就是函数值*/;

 

%if &i.=&start. %then %do;  data base; set function;run;                            

                  %end;

%else do;  proc append base=base data= function force;run;

%let I = %eval(&i.+&increment.);

%end;

%mend;

   %main(0.006,0.02,0.002);

 

 

 

 

 

二维码

扫码加我 拉你入群

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

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

2008-3-18 23:29:00
哈哈。

谢谢~~主要

明天我把论坛币汇到你帐户谢谢啊~~~

data base;

set function;run; 与proc append base=base data= function force;run;

有什么作用,我感觉是不是重复了??我对sas是正处于探索阶段,用它做毕业论文模型数据处理。

[此贴子已经被作者于2008-3-18 23:45:59编辑过]

二维码

扫码加我 拉你入群

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

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

2008-3-19 01:06:00

不重复的,第一步是初始化,如果在base不存在的时候append,结果没错,但是log会出error message

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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