21%let sas_risk_workgroup_dir = ${globals.sas_risk_workgroup_dir};
24%let cycle_key = ${context.cycle.key};
27%let analysis_run_key = ${context.analysisRun.key};
29%let ValueAtRisk_Level = ${params.VARLEVEL};
31%let current_dt_ymd = %sysfunc(date(), yymmddd10.);
32%let current_tm_tod = %sysfunc(time(), tod10.);
35%include
"&sas_risk_workgroup_dir./groups/Public/SASRiskManagementCore/cycles/&cycle_key./init.sas" / lrecl = 32000 source2;
41%irm_rest_get_rgf_cycle(key = &cycle_key.
42 , host = &rgf_protocol:
44 , tgt_ticket = &tgt_ticket.
46 , outVarTicket = ticket
47 , outSuccess = httpSuccess
48 , outResponseStatus = responseStatus
52 call symputx(
"cycle_baseDt", baseDt,
"L");
53 call symputx(
"cycle_entityId", entityId,
"L");
57%let exposureHistogram_max =${params.EXPOSUREMAX};
58%let exposureHistogram_cellCnt =${params.EXPOSURECELLCOUNT};
65%let exposureHistogram_width =%eval(&exposureHistogram_max./&exposureHistogram_cellCnt.);
67%let debug_flg =${params.DEBUGFLG};
69%let custom_AnalysisName =${params.ANALYSISDATANAME};
95 libname libdebug %sysfunc(quote(%sysfunc(pathname(work)))) ;
97 %
if %upcase(&debug_flg.) = TRUE %then %
do;
99 %let dubug_libname_path=/opt/sas/config/Lev1/AppData/SASRiskWorkGroup/groups/StressTesting/testing_debug;
101 %
if %rsk_dir_exists(DIR=&dubug_libname_path.)=0 %then %
do;
102 %rsk_mkdirs(DIR=&dubug_libname_path.);
104 libname libdebug
"&dubug_libname_path.";
105 data libdebug.&ds_in_model_result.;
106 set &ds_in_model_result.;
114 select distinct SCENARIO_ID into :_actualscenario_list_ separated by
" "
115 from &ds_in_model_result.(where=(DISCRETIZED_EXPOSURE NE . and SCENARIO_ID NE
"BASECASE"));
116 select distinct reporting_dt into :_reporting_dt_
117 from &ds_in_model_result.(where=(DISCRETIZED_EXPOSURE NE . and SCENARIO_ID NE
"BASECASE"));
121%let _actualscenario_cnt_ = %sysfunc(countw(&_actualscenario_list_,%str( )));
128%macro scenario_loop( libname =
132 , scenarioname_list =
135 %
do i_scenario=1 %to &scenario_cnt.;
138 data &libname..scenario_data_&i_scenario.;
139 set &ds_in.(where=(DISCRETIZED_EXPOSURE NE . and SCENARIO_ID=
"%scan(&scenarioname_list., &i_scenario., %str( ))"));
143 %irmst_fft_convolution( libname=&libname.
144 , ValueAtRisk_Level=&ValueAtRisk_Level.
145 , ds_in=scenario_data_&i_scenario.
146 , ds_out=compoundDistribution_&i_scenario.
152 ExpectedCompoundLoss,
154 %
do i_sector=1 %to §ors_cnt.;
156 , ExpectedCompoundLoss_&i_sector.
157 , EconomicCapital_&i_sector.
159 into :_VAR_&i_scenario.,
160 :_ExpectedCompoundLoss_&i_scenario. ,
161 :_EconomicCapital_&i_scenario.
162 %
do i_sector=1 %to §ors_cnt.;
163 , :_VAR_&i_scenario._&i_sector.
164 , :_ExpectedCompoundLoss_&i_scenario._&i_sector.
165 , :_EconomicCapital_&i_scenario._&i_sector.
167 from &libname..compoundDistribution_&i_scenario.(obs=1);
173 select sum((normalized_expected_loss*PD_SD)**2)
174 %
do i_sector=1 %to §ors_cnt.;
175 , sum((normlzd_expctd_loss_sector_&i_sector.*PD_Volatility_Sector_&i_sector.)**2)
177 into :CVAR_denom_scenario_&i_scenario.
178 %
do i_sector=1 %to §ors_cnt.;
179 ,:CVAR_denom_scenario_&i_scenario._sector_&i_sector.
181 from &libname..scenario_data_&i_scenario.;
204 %
do i_scenario=1 %to &scenario_cnt.;
205 if SCENARIO_ID=
"%scan(&scenarioname_list., &i_scenario., %str( ))" then
do;
207 VAR = &&_VAR_&i_scenario.. * ((normalized_expected_loss*PD_SD)**2) / &&CVAR_denom_scenario_&i_scenario.;
208 ExpectedLoss = &&_ExpectedCompoundLoss_&i_scenario.. * ((normalized_expected_loss*PD_SD)**2) / &&CVAR_denom_scenario_&i_scenario.;
209 EconomicCapital = &&_EconomicCapital_&i_scenario.. * ((normalized_expected_loss*PD_SD)**2) / &&CVAR_denom_scenario_&i_scenario.;
210 ValueAtRisk_Alpha = &ValueAtRisk_Level.;
211 %
do i_sector=1 %to §ors_cnt.;
213 VAR_SECTOR&i_sector. = &&_VAR_&i_scenario._&i_sector.. * ((normlzd_expctd_loss_sector_&i_sector.*PD_Volatility_Sector_&i_sector.)**2) / &&CVAR_denom_scenario_&i_scenario._sector_&i_sector.;
214 ExpectedCompoundLoss_SECTOR&i_sector. = &&_ExpectedCompoundLoss_&i_scenario._&i_sector.. * ((normlzd_expctd_loss_sector_&i_sector.*PD_Volatility_Sector_&i_sector.)**2) / &&CVAR_denom_scenario_&i_scenario._sector_&i_sector.;
215 EconomicCapital_SECTOR&i_sector. = &&_EconomicCapital_&i_scenario._&i_sector.. * ((normlzd_expctd_loss_sector_&i_sector.*PD_Volatility_Sector_&i_sector.)**2) / &&CVAR_denom_scenario_&i_scenario._sector_&i_sector.;
219 SIMULATIONPART =
'Exposure';
223 %
if %upcase(&debug_flg.) = TRUE %then %
do;
224 data libdebug.ECON_CAP;
233%scenario_loop( libname =libdebug
234 , ds_in =&ds_in_model_result.
235 , ds_out =&ds_out_model_result.
236 , scenario_cnt =&_actualscenario_cnt_.
237 , scenarioname_list =&_actualscenario_list_.