SAS Documentation
SASĀ® Solution for Stress Testing
Reference manual - version 08.2021
Loading...
Searching...
No Matches
irmst_script_attribution_analysis.sas
1/* ********************************************* */
2/* Attribution Analysis: Input Parameters */
3/* ********************************************* */
4
5/* TGT Authentication Ticket */
6%let rgf_tgt_ticket = ${globals.ticket};
7
8/* Get the root location of the SAS Risk Workgroup Application */
9%let sas_risk_workgroup_dir = ${globals.sas_risk_workgroup_dir};
10
11/* Cycle Id */
12%let cycle_id = ${context.cycle.key};
13
14/* Analysis Run Id */
15%let analysis_run_id = ${context.analysisRun.key};
16
17/* IRM Configuration Set Id */
18%let config_set_id = ${params.CONFIGSETID};
19
20%let attribution_analysis_key = ${params.ATTRIBUTIONTEMPLATE};
21
22/* *************************** */
23/* Current period parameters */
24/* *************************** */
25
26/* Credt Risk Detail Result (Current Period) */
27%let curr_result_key = ${params.CURRENTRESULT.key};
28
29 /* Analysis Run Key (Current Period) */
30 %let attrib_curr_analysis_run_id = ${params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0]};
31 /* ModelRun (Current Period) */
32 %let credit_model_run_key = ${params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0].nav("modelRun_analysisRun|RMC")[0].key};
33 /* Portfolio (Current Period) */
34 %let portfolio_key = ${function:findRunParameter(params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0],"PORTFOLIO")};
35 /* Counterparty (Current Period) */
36 %let counterparty_key = ${function:findRunParameter(params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0],"CREDITMODEL", "COUNTERPARTY")};
37 /* Model Input DataMap key (Current Period) */
38 %let modelIn_dataMap_key = ${function:findRunParameter(params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0],"MODELINPUTMAP")};
39 /* Model Output DataMap key (Current Period) */
40 %let modelOut_dataMap_key = ${function:findRunParameter(params.CURRENTRESULT.nav("analysisData_analysisRun_out|RMC")[0],"MODELOUTPUTMAP")};
41 /* Credit Risk Detail results for the previous period */
42 %let prev_fr_htm_data_key = ${context.cycle.nav("cycle_analysisData_prev|RMC").filter("eq(resultsCategoryCd,'FR_HTM')")[0]};
43
44
45/* *************************** */
46/* Previous period parameters */
47/* *************************** */
48
49/* Credt Risk Detail Result (Preious Period) */
50%let prev_result_key = ${params.PREVIOUSRESULT.key};
51
52 /* Analysis Run Key (Current Period) */
53 %let attrib_prev_analysis_run_id = ${params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0]};
54 /* ModelRun (Previous Period) */
55 %let prev_credit_model_run_key = ${params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0].nav("modelRun_analysisRun|RMC")[0].key};
56 /* Portfolio (Previous Period) */
57 %let prev_portfolio_key = ${function:findRunParameter(params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0],"PORTFOLIO")};
58 /* Counterparty (Previous Period) */
59 %let prev_counterparty_key = ${function:findRunParameter(params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0],"CREDITMODEL", "COUNTERPARTY")};
60 /* Model Input DataMap key (Previous Period) */
61 %let prev_modelIn_dataMap_key = ${function:findRunParameter(params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0],"MODELINPUTMAP")};
62 /* Model Output DataMap key (Previous Period) */
63 %let prev_modelOut_dataMap_key = ${function:findRunParameter(params.PREVIOUSRESULT.nav("analysisData_analysisRun_out|RMC")[0],"MODELOUTPUTMAP")};
64 /* Credit Risk Detail results for the period prior to the previous period (i.e. two periods back) */
65 %let prev2_fr_htm_data_key = ${params.PREVIOUSRESULT.nav("analysisData_cycle|RMC")[0].nav("cycle_analysisData_prev|RMC").filter("eq(resultsCategoryCd,'FR_HTM')")[0]};
66
67/* Output Analysis Data Name and Description */
68%let out_analysis_data_name = ${params.OUTANALYSISDATANAME};
69%let out_analysis_data_desc = ${params.OUTANALYSISDATADESC};
70
71/* Number of partitions for parallel processing while performing attribution analysis */
72%let attribution_n_partitions = ${params.NPARALLELRUNS};
73
74/* Keep MIP Cube? */
75%let keep_mip_cube_flg = ${params.KEEPMIPCUBE};
76
77/* LASR load method (Append/Replace) */
78%let lasr_load_method = ${params.LASRLOADMETHOD};
79
80/* Stage Attribution Method (Model/Stage) */
81%let stage_attribution_method = ${params.STAGEATTRIBUTIONMETHOD};
82
83/* Log Level: 1-4 */
84%let log_level = ${params.LOGLEVEL};
85
86/* Maximum wait time for IRM job completion: <number of seconds> */
87%let max_wait = ${params.MAXWAIT};
88
89/* ********************************************* */
90
91/* Initialize the environment */
92%include "&sas_risk_workgroup_dir./groups/Public/SASRiskManagementCore/cycles/&cycle_id./init.sas" / lrecl = 32000 source2;
93
94/* Set logging options (based on the value of LOG_LEVEL macro variable) */
95%irm_set_logging_options();
96
97
98/* Set Instance Parameters */
99%let jobflow_category = Analytics;
100%let jobflow_type = %lowcase(irm&solutionId._attribution_analysis);
101%let instance_date = %sysfunc(date(), yymmddp10.);
102%let instance_time = %sysfunc(prxchange(s/(\d+):(\d+):(\d+)/$1h$2m$3s/i, -1, %sysfunc(time(), tod8.)));
103%let instanceName = Attribution Analysis &instance_date._&instance_time.;
104%let instanceDesc = Attribution Analysis;
105
106/* Process LASR load method */
107%let reload_lasr_flg = %irmc_process_lasr_load_method(&lasr_load_method.);
108
109/* Run option table */
110data work.run_option;
111 length
112 config_name $32.
113 config_value $10000.
114 ;
115 config_name = "RMC_FA_ID"; config_value = "&rmc_fa_id."; output;
116 config_name = "CYCLE_ID"; config_value = "&cycle_id."; output;
117 config_name = "ANALYSIS_RUN_ID"; config_value = "&analysis_run_id."; output;
118 config_name = "ANALYSIS_TYPE"; config_value = "FR_HTM"; output;
119 config_name = "ATTRIB_CURR_ANALYSIS_RUN_ID"; config_value = "&attrib_curr_analysis_run_id."; output;
120 config_name = "ATTRIB_PREV_ANALYSIS_RUN_ID"; config_value = "&attrib_prev_analysis_run_id."; output;
121 config_name = "MAX_WAIT"; config_value = "&max_wait."; output;
122 config_name = "LOG_LEVEL"; config_value = "&log_level."; output;
123 config_name = "RELOAD_LASR_FLG"; config_value = "&reload_lasr_flg."; output;
124 config_name = "TGT_TICKET"; config_value = "&rgf_tgt_ticket."; output;
125run;
126
127/* Credit Stress parameters table */
128data work.credit_risk_config;
129 length
130 config_name $32.
131 config_value $100.
132 ;
133 config_name = "ATTRIBUTION_ANALYSIS_KEY"; config_value = "&attribution_analysis_key."; output;
134 config_name = "CURR_RESULT_KEY"; config_value = "&curr_result_key."; output;
135 config_name = "CREDIT_MODEL_RUN_KEY"; config_value = "&credit_model_run_key."; output;
136 config_name = "PORTFOLIO_KEY"; config_value = "&portfolio_key."; output;
137 config_name = "COUNTERPARTY_KEY"; config_value = "&counterparty_key."; output;
138 config_name = "MODELIN_DATAMAP_KEY"; config_value = "&modelIn_dataMap_key."; output;
139 config_name = "MODELOUT_DATAMAP_KEY"; config_value = "&modelOut_dataMap_key."; output;
140 config_name = "PREV_FR_HTM_DATA"; config_value = "&prev_fr_htm_data_key."; output;
141
142 config_name = "PREV_RESULT_KEY"; config_value = "&prev_result_key."; output;
143 config_name = "PREV_CREDIT_MODEL_RUN_KEY"; config_value = "&prev_credit_model_run_key."; output;
144 config_name = "PREV_PORTFOLIO_KEY"; config_value = "&prev_portfolio_key."; output;
145 config_name = "PREV_COUNTERPARTY_KEY"; config_value = "&prev_counterparty_key."; output;
146 config_name = "PREV_MODELIN_DATAMAP_KEY"; config_value = "&prev_modelIn_dataMap_key."; output;
147 config_name = "PREV_MODELOUT_DATAMAP_KEY"; config_value = "&prev_modelOut_dataMap_key."; output;
148 config_name = "PREV2_FR_HTM_DATA"; config_value = "&prev2_fr_htm_data_key."; output;
149 config_name = "KEEP_MIP_CUBE_FLG"; config_value = "&keep_mip_cube_flg."; output;
150 config_name = "ATTRIBUTION_N_PARTITIONS"; config_value = "&attribution_n_partitions."; output;
151 config_name = "OUT_ANALYSIS_DATA_NAME"; config_value = "&out_analysis_data_name."; output;
152 config_name = "OUT_ANALYSIS_DATA_DESC"; config_value = "&out_analysis_data_desc."; output;
153 config_name = "STAGE_ATTRIBUTION_METHOD"; config_value = "&stage_attribution_method."; output;
154run;
155
156data work.attribution_scenario_map;
157 length
158 from_scenario_id $32.
159 to_scenario_id $32.
160 ;
161 stop;
162run;
163
164%let instanceKey =;
165%let jobflow_status = Unknown;
166/* Create job flow instance and wait for completion */
167%irm_rest_create_jobflow_instance(instance_name = &instanceName.
168 , description = &instanceDesc.
169 , entityId = &entity_id.
170 , entityRoleKey = &entity_role_key.
171 , category = &jobflow_category.
172 , jobflowFile = &jobflow_type.
173 , baseDate = &irm_base_dt.
174 , configSetId = &config_set_id.
175 , federatedAreaID = &irm_fa_id.
176 , sourceFederatedAreaId = &irm_fa_id.
177 , src_param_tables = work.run_option work.credit_risk_config
178 , tgt_param_tables = &solutionLibrefPrefix._CFG.RUN_OPTION &solutionLibrefPrefix._CFG.CREDIT_RISK_CONFIG
179 , src_upload_tables = work.attribution_scenario_map
180 , tgt_upload_tables = &solutionLibrefPrefix._CFG.ATTRIBUTION_SCENARIO_MAP
181 , wait_flg = Y
182 , pollInterval = 3
183 , maxWait = &max_wait.
184 , host = &irm_protocol.://&irm_host.
185 , port = &irm_port.
186 , tgt_ticket = &rgf_tgt_ticket.
187 , outvar = instanceKey
188 , outVarStatus = jobflow_status
189 );
190
191%if(&jobflow_status. = Successful) %then %do;
192 /* Refresh the Star Schema Views */
193 %irmc_refresh_lasr_schema_view(lasr_lib = &lasr_libref.
194 , mart_table_name = &solutionId._CREDIT_RISK_DETAIL
195 , rls_table_name = &solutionId._CREDIT_RISK_DETAIL_RLS
196 , meta_repository = &meta_repository.
197 , lasr_library_name = &lasr_library_name.
198 , lasr_meta_folder = &lasr_meta_folder.
199 );
200%end;
201
202/* Update the Cycle control table */
203%irmc_update_ctrl_table(cycle_id = &cycle_id.
204 , analysis_run_id = &analysis_run_id.
205 , dr_libref = &dr_libref.
206 , entry_type = IRM
207 , entry_id = &instanceKey.
208 , entry_name = &instanceName.
209 );