楼主: saiyasaibing
1491 3

[原创博文] 请各位高手帮我看看程序 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
1918 个
通用积分
1.2100
学术水平
3 点
热心指数
4 点
信用等级
1 点
经验
1059 点
帖子
116
精华
0
在线时间
165 小时
注册时间
2008-6-16
最后登录
2021-7-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. %let m=200;
  2. %let n=200;
  3. %let gamm=2;
  4. %let R0=0.9;
  5. %let lambda=0.5;
  6. %let seed=1;
  7. %let Fdis=FINV(1-&R0,2,2*&gamm);
  8. %let rho=&gamm/&Fdis;
  9. %let tau=1.1;


  10. proc iml;

  11. reset noprint;


  12. randx=ranexp(repeat(&seed,&m))/λ

  13. randy=&tau*rangam(repeat(&seed,&n),&gamm);

  14. one1=j(&m,1,1);
  15. u=randx`*one1;
  16. one2=j(&n,1,1);
  17. v=randy`*one2;


  18. start inner(t) global(x);
  19. _vu=v/u; _uv =u/v; _gn =(&n-1)*&gamm;
  20. _t =t*_vu;
  21. B= beta(&gamm,(&n-1)*&gamm);
  22. z =1/B *((_uv*_t) **(&gamm -1) *(1-(_uv*_t)) **(_gn -1)) *_uv *(1-x) **(&m -2) *(&m -1);
  23. return(z);
  24. finish;
  25. start outer(s) global(x);
  26. x =s;
  27. t_interval = 0 ||x;
  28. call quad(w, "inner", t_interval);
  29. return (w);
  30. finish;
  31. /* when u <=v*/
  32. if u < v then
  33. do;
  34. s1_interval= {0 1};
  35. call quad(R0, "outer", s1_interval);
  36. print R0;
  37. end;

  38. if u > v then
  39. do;
  40. _vu=v/u;
  41. s2_interval= 0 ||_vu;
  42. call quad(R1, "outer", s2_interval);
  43. R2 =R1 -(1-_vu)**(&m-1);
  44. print R2;
  45. end;


  46. quit;
  47. %put _user_;
复制代码
运行不出结果,望各位赐教。谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Interval RETURN Global finish repeat repeat inner start 程序

沙发
王之波 发表于 2010-11-5 00:47:23 |只看作者 |坛友微信交流群
完全无懂…………
风清者,之波也

使用道具

藤椅
jingju11 发表于 2010-11-5 11:10:38 |只看作者 |坛友微信交流群
1# saiyasaibing


  1. %let m=200;
  2. %let n=200;
  3. %let gamm=2;
  4. %let R0=0.9;
  5. %let lambda=0.5;
  6. %let seed=1;
  7. %let Fdis=%sysfunc(FINV(1-&R0, 2, 2*&gamm));
  8. %let rho=%sysevalf(&gamm /&Fdis); %put ρ
  9. %let tau=1.1;
  10. proc iml;
  11. reset noprint;
  12. randx =ranexp(repeat(&seed,&m))/λ
  13. randy =&tau *rangam(repeat(&seed,&n),&gamm);
  14. one1=j(&m,1,1);
  15. u =randx`*one1;
  16. one2 =j(&n,1,1);
  17. v =randy`*one2;
  18. B =beta(&gamm, (&n-1)*&gamm);
  19. _vu =v/u;
  20. _gn =(&n-1)*&gamm;
  21. print u v b _gn;

  22. start inner(t) global(x, v, u, b, _vu, _gn);  
  23.   z =1/b*(t **(&gamm -1) *(1-t) **(_gn -1)) *_vu *(1-_vu*x) **(&m -2) *(&m -1);
  24.   return(z);
  25. finish;
  26. start outer(s) global(x);
  27.   x =s;
  28.   t_interval = 0 ||x;
  29.   call quad(w, "inner", t_interval) eps=1E-10 peak=0.0001;  
  30.   return (w);
  31. finish;
  32. if u <=v then do;
  33.   s1_interval= 0 ||_vu;
  34.   call quad(R0, "outer", s1_interval) eps=1E-10 peak=0.0001;
  35. end; print u v R0[format=E21.15];
  36. /* u =450; _vu =v/u;*/
  37. if u > v then do;
  38.   s2_interval= {0 1};
  39.   call quad(R1, "outer", s2_interval) eps=1E-10 peak=1e-7;
  40.   R2 =R1 -(1-_vu)**(&m-1);
  41. end; print u v R2[format=E21.15];
  42. quit;
复制代码


I modify the formula since I was using a false transformation before (I forgot the basic calculus even).
Even though I make the code execute, but, honestly, I am not clear what happens for SAS calculation the integral behind the scene, nor the usage of eps, peak and so on. I would ask someone who really knows about that. On the other hand, probably you can ask for a check on MatLab since so many people have mentioned its superiority on integration.
JingJu

使用道具

板凳
saiyasaibing 发表于 2010-11-5 11:40:52 |只看作者 |坛友微信交流群
3# jingju11
Thank you jingju, I definitely will try Matlab. I just don't wanna give up on SAS.
Need to learn a lot.

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-5 20:16