使用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:计算机内存不足