楼主: 颜书云
1621 0

sas中宏参循环蒙特卡洛模拟时,出现内存不足如何解决 [推广有奖]

  • 0关注
  • 0粉丝

初中生

33%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
179 点
帖子
14
精华
0
在线时间
8 小时
注册时间
2009-3-18
最后登录
2019-5-15

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
使用sas进行现金流的模拟:
step1,设置了转移概率矩阵,包含160行4列,并将其变成宏变量;
step2,   根据转移矩阵,结合数据集每一条记录,逐条衍生一组向量,用来计量统计结果;
step3, 实际计量过程中,每条记录循环200次,运行出现内存不足,如何解决,参考代码如下:
options nomprint;
129  %macro mtctest;
130  data MT.MCT_MTBx;
131    set MT.mct_data_OK;
132    *set tb;
133    ;
134    array mob_now(12) (0,1,2,3,4,5,6,7,8,9,10,11);
135    *array dpd_now(13) (0,0,0,0,0,0,0,0,0,0,0,0,0);
136    array return_p(12) (0,0,0,0,0,0,0,0,0,0,0,0);     /*循环1次的结果*/
137    array return_PM(12) (0,0,0,0,0,0,0,0,0,0,0,0);  /*循环200次的累积结果*/
138    retain  tk dpd_now 0;  
139    return_PM1=0; return_PM2=0;   return_PM3=0;   return_PM4=0;   return_PM5=0;   return_PM6=0;   return_PM7=0;
140    return_PM8=0; return_PM9=0;   return_PM10=0;  return_PM11=0;  return_PM12=0;
141    %do loopn=1 %to 200;  /*模拟200次*/
142        dpd_now=0;
143        %do i=1 %to 12;
144         if &i<=sover-1 then do;
145           sj=min(1,sum(ranuni(123),0.0000001)); tk=0; return_p&i=0;HK1=0; HK2=0;
146           %do j=1 %to 160;
147              if epp_num=&&epp_num_&j. and mob_now&i=&&mob_now_&j. and dpd_now=&&dpd_now_&j. and sj>&&pb_st_&j. and sj<=&&pb_end_&j. and tk=0 then do;
148               
149                  if       &&dpd_now_&j<=0 and &&next_rep_cnt_&j>=1 then HK1=sum(&&mob_now_&j.,1);
150                  else if  &&dpd_now_&j<=0 and &&next_rep_cnt_&j<=0 then HK1=0;
151                  else if  &&dpd_now_&j>0  and &&next_rep_cnt_&j>=1 then HK1=sum(&&mob_now_&j.,1,-&&dpd_now_&j.);
152                  else HK1=0;
153
154                  if       &&dpd_now_&j<=0 and &&next_rep_cnt_&j>=1 then HK2=sum(&&mob_now_&j.,&&next_rep_cnt_&j.);
155                  else if  &&dpd_now_&j<=0 and &&next_rep_cnt_&j<1  then HK2=0;
156                  else if  &&dpd_now_&j>0  and &&next_rep_cnt_&j>=1  then HK2=sum(&&mob_now_&j.,&&next_rep_cnt_&j.,-&&dpd_now_&j);
157                  else HK2=0;
158
159                  *HK1=HK_st&j;   *HK2=HK_end&j; dpd_now=sum(&&dpd_now_&j.,-&&next_rep_cnt_&j.,+1);   tk=&j;
160               
161                  if  HK1=0 then do;  return_p&i=0;  end;
162                  else do;
163                       %do k=1 %to 12;
164                           if &k>=HK1 and &k<=HK2 then return_p&i=sum(return_p&i,plan_amt&k);  
165                       %end;
166                  end;
167              end;
168            %end;
169          end;
170       %end;
171       %do m=1 %to 12;
172           return_PM&m=sum(return_PM&m,return_p&m);
173       %end;
174    %end;
175  drop mob_now1-mob_now12  epp_num_1-epp_num_162  dpd_now_1-dpd_now_162 next_rep_cnt_1-next_rep_cnt_162 pb_st_1-pb_st_162 pb_end_1-pb_end_162
176  ;
177  run;
178  %mend;
179
180  %mtctest;


NOTE: 内部的源假脱机文件已截断。行和列信息的错误日志记录在下一步边界之前可能不完整。

error:计算机内存不足

二维码

扫码加我 拉你入群

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

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

关键词:蒙特卡洛模拟 内存不足 蒙特卡洛 蒙特卡 options 蒙特卡洛 现金流 如何 记录 统计

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

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

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

GMT+8, 2024-4-19 22:42