楼主: will_k5
1219 2

call symput 多次使用问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

7%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
174 点
帖子
7
精华
0
在线时间
38 小时
注册时间
2012-5-31
最后登录
2018-12-12

楼主
will_k5 发表于 2013-11-6 06:15:55 |AI写论文
10论坛币
我在用proc nlin做nelson siegel 模型,在估计rate时遇到了以下问题在用如下程序生成了Parmds表格后
  1. %macro NS;
  2. %do i=1 %to 3;
  3. data para;
  4. set rate(keep=rate&i);
  5. set time;
  6. run;

  7. proc nlin data=para method=newton;
  8. parms b0 = 0.05
  9.       b1 = 0.05
  10.       b2 = 0.05
  11.       b3 = 0.05
  12.       tao1 = 1
  13.       tao2 = 1
  14.    ;

  15. model rate&i=b0+b1*(1-exp(-ytm/tao1))/(ytm/tao1)+b2*(1-exp(-ytm/tao1))/((ytm/tao1)-exp(-ytm/tao1))+b3*(1-exp(-ytm/tao2))/((ytm/tao2)-exp(-ytm/tao2));
  16. ods output parameterestimates = parmd;
  17. run;


  18. data parmds;
  19.   %if &i^=1
  20.   %then %do;
  21. set parmds;
  22.   %end;
  23. set parmd(rename=(estimate=estimate&i));
  24. drop StdErr Alpha LowerCL UpperCL tValue Probt;
  25. run;

  26. %end;
  27. %mend NS;
复制代码
我的想法是每次将估计值esitmate&i利用call symput赋予parameter值,带入function计算
  1. data _null_;
  2. set parmds;
  3. call symput(parameter, estimate1);
  4. run;


  5. proc fcmp outlib = work.func.nelson;
  6. function nelson_siegel(years);
  7. return(  
  8. &b0+&b1*(1-exp(-years/&tao1))/(years/&tao1)+&b2*(1-exp(-years/&tao1))/((years/&tao1)-exp(-years/&tao1))+&b3*(1-exp(-years/&tao2))/((years/&tao2)-exp(-years/&tao2))
  9. );
  10. endsub;
  11. run;
  12. options cmplib=work.func;
复制代码
可是call symput只能使用一次,在第二次赋值时
  1. data _null_;
  2. set parmds;
  3. call symput(parameter, esitmate2);
  4. run;


  5. data  rate2;
  6. do years =1 to 30;
  7. predyield= nelson_siegel(years);
  8. output;
  9. end;
  10. run;
复制代码
data rate2 的结果仍然是第一次的结果,纠结了一下午无解。如能帮助,万分感谢!

关键词:symput call put Parameter Estimates method 程序 模型

沙发
jingju11 发表于 2013-11-6 10:39:13
许多的细节都衔接不上。如果只是要预测值,我想,程序拼凑起来很多。或许可以简化成一两行。京剧

藤椅
will_k5 发表于 2013-11-6 11:28:14
jingju11 发表于 2013-11-6 10:39
许多的细节都衔接不上。如果只是要预测值,我想,程序拼凑起来很多。或许可以简化成一两行。京剧
谢谢,问题已经解决了

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

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