全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3347 13
2013-07-04
急求高手解决sas宏程序优化和在给定条件下通过模拟搜索控制限。十分感谢。

下面代码的目的是想得到在给定参数h的情况下,通过模拟结果得到10000次的arl平均值。对于这个代码,请问有没有简单的代码实现?或者提高下面代码的运算速度?
其次,我还想实现通过二分法的方法搜索h,使得搜索到的最终h满足模拟10000次的arl平均值与300的误差在正负1之间。我该怎么实现那?是宏里面嵌套宏还是先创建函数,对其调用那?能不能用代码做一下实例,谢谢。
求解决,万分感谢。

%macro arl0(h);
%do i=1 %to 10000;
data a&i;
retain z 0;
do until((z>&h);
k=0.5;
x=rannor(0);
if (z+x-k) gt 0 then z=z+x-k;
else z=0;
output;
end;
run;
proc sql noprint;select count(*) into :n from a&i;quit;
data arl&i;arl=&n;run;
%end;
%mend arl0;
%arl0(10000);
data arl;set arl1-arl10000;run;
proc means data=arl;var arl;run;
二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-5 00:05:07
不懂的飘过
二维码

扫码加我 拉你入群

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

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

2013-7-5 00:53:15
不需要生成任何数据集的
复制代码
二维码

扫码加我 拉你入群

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

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

2013-7-5 21:56:20
moyunzheng 发表于 2013-7-5 00:53
不需要生成任何数据集的
牛,大大的提高了运算速度,十分感谢。
我想问一下您为什么加%local 那?
另外再想请教一下高手现在的代码实现了在给定h下通过模拟计算arl,但是我还想实现使模拟后的arl为200的h的值,怎么写code那?我想通过二分法的方法实现。比如先给定h的上下界的初值,比如4和2,对4和2分别模拟得到arl。如果4对应的arl大于200,2对应的arl小于200,那么取4和2的均值3作为h的上界;如果3对应的arl大于200,2对应的arl小于200,那么取3和2的均值2.5作为h的上界,继续判断。。。。直到模拟得到的arl与200的差在正负1之间,此时的h即为所求。注意:h越大,其对应的arl越大。怎么实现那?
万分感谢。
二维码

扫码加我 拉你入群

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

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

2013-7-6 02:42:07
fyfzhdsfdx 发表于 2013-7-5 21:56
牛,大大的提高了运算速度,十分感谢。
我想问一下您为什么加%local 那?
另外再想请教一下高手现在的代 ...
在楼上的程序之上略加修改.
因为使用MONTE CARLO,所以h 的取值应随不同的二分区间的初始值而略有变化.京剧
复制代码
二维码

扫码加我 拉你入群

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

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

2013-7-6 10:57:30
jingju11 发表于 2013-7-6 02:42
在楼上的程序之上略加修改.
因为使用MONTE CARLO,所以h 的取值应随不同的二分区间的初始值而略有变化. ...
十分感谢,不仅目的达到,而且运算很快
但是我想问一下:1.您产生随机数时为什么用x =rannor(1)?这样虽然重复了10000次,但每次产生的随机数是相同的。2. put @2h=d10.7@15arl=12.4-r; 这句话应该是定义h和arl的输出格式的吧?但是我没能完全理解,特别是“-r”,sas基础太差啊!您能不能给我解释一下!再次感谢!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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