楼主: fyfzhdsfdx
3446 13

sas宏程序优化和通过模拟搜索控制限 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
966 点
帖子
97
精华
0
在线时间
89 小时
注册时间
2012-8-22
最后登录
2016-9-24

楼主
fyfzhdsfdx 发表于 2013-7-4 23:39:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
急求高手解决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;
二维码

扫码加我 拉你入群

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

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

关键词:SAS宏程序 程序优化 SAS宏 宏程序 proc sql 二分法 平均值 count 程序

沙发
Fire_fox 发表于 2013-7-5 00:05:07
不懂的飘过

藤椅
moyunzheng 发表于 2013-7-5 00:53:15
不需要生成任何数据集的
  1. %macro arl0(h);
  2. %local h;
  3. data _null_;
  4. array counts{*}count1-count10000;
  5. do i=1 to 10000;
  6.         z=0;count=0;
  7.         do until(z>&h);
  8.                 k=0.5;
  9.                 x=rannor(0);
  10.                 if (z+x-k) gt 0 then z=z+x-k;
  11.                 else z=0;
  12.                 count=count+1;
  13.                 end;
  14.         counts[i]=count;
  15.         end;
  16. arl=mean(of counts{*});
  17. put arl=;
  18. run;
  19. %mend arl0;
复制代码

板凳
fyfzhdsfdx 发表于 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越大。怎么实现那?
万分感谢。

报纸
jingju11 发表于 2013-7-6 02:42:07
fyfzhdsfdx 发表于 2013-7-5 21:56
牛,大大的提高了运算速度,十分感谢。
我想问一下您为什么加%local 那?
另外再想请教一下高手现在的代 ...
在楼上的程序之上略加修改.
因为使用MONTE CARLO,所以h 的取值应随不同的二分区间的初始值而略有变化.京剧
  1. data _null_;
  2.         u1=0; u2=10; h =(u1+u2)/2;
  3.         do s =1 to 100;
  4.                 sum =0;
  5.           do i=1 to 10000;
  6.             z=0;
  7.       do j =1 by 1 until(z>h);
  8.               k =0.5;
  9.              x =rannor(1);
  10.              z =max(0,z+x-k);        
  11.             end;
  12.             sum ++j;
  13.        end;
  14.                 arl =sum/10000;
  15.                 put @2h=d10.7@15arl=12.4-r;
  16.                 if arl <=1+200 & arl >=-1+200 then do;
  17.                         rc =0;
  18.                         leave;
  19.                         end;
  20.                 else do;
  21.                         if arl <-1+200 then do;
  22.                                 u1 =h;
  23.                                 h =(u1+u2)/2;
  24.                                 end;
  25.                         else if arl > 1+200 then do;
  26.                                 u2 =h;
  27.                                 h =(u1+u2)/2;
  28.                                 end;
  29.                         end;
  30.                 end;
  31.         if rc ^=0 then put "cannot find solution in 100 iterations.";
  32.         else put "number of iteratons taken =" s;
  33.         run;
复制代码

地板
fyfzhdsfdx 发表于 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基础太差啊!您能不能给我解释一下!再次感谢!

7
jingju11 发表于 2013-7-6 12:00:09
--r to align the text on right. but it may not working here...
Fixed seed ensures a reproducible result, that is, if you use the same start/end points, you will get the same results in different runs.
A seed in one data step will traverse the random list sequentially; hence no repeated random numbers being generated.
JingJu

8
fyfzhdsfdx 发表于 2013-7-6 20:36:26
jingju11 发表于 2013-7-6 12:00
--r to align the text on right. but it may not working here...
Fixed seed ensures a reproducible re ...
I  got it,thank you very much.
I need your help for another question,I am so sorry.
The question is:how to generate random number that its density function is

                        function.JPG
I try to obtain its CDF(cumulative distribution function),then through inverse function to obtain random,but it can't work as CDF is
piecewise function.
Regards and thanks.

9
moyunzheng 发表于 2013-7-6 20:41:40
fyfzhdsfdx 发表于 2013-7-5 21:56
牛,大大的提高了运算速度,十分感谢。
我想问一下您为什么加%local 那?
另外再想请教一下高手现在的代 ...
加%local完全是个人的编程习惯,没什么特别的意义。

10
fyfzhdsfdx 发表于 2013-7-6 20:50:28
moyunzheng 发表于 2013-7-6 20:41
加%local完全是个人的编程习惯,没什么特别的意义。
谢啦!顺便问一下您知道怎么用sas产生分段密度函数的随机数吗?问题见上。谢谢。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-11 01:13