SAS Documentation
SASĀ® Solution for Stress Testing
Reference manual - version 08.2021
Loading...
Searching...
No Matches
irmst_load_trans_matrix_results.sas
1/*-----------------------------------------------------------------------------
2 * NAME: irmst_load_trans_matrix_results.sas
3 *
4 * PURPOSE: To load Transition Matrix results
5 *
6 * NOTES:
7 *
8 * MACRO OPTIONS:
9 * run_name - Name of the generated risk cube
10 * workgroup - Name of workgroup with the generated risk cube
11 * model_group_map - Portfolio-level model_group_map output table from
12 * irmst_get_model_group_maps.sas
13 * function_package - OPTIONAL: Two-level name for function package
14 * scenario_meta - Input table name of scenario metadata
15 * tm_to_load - Specify table name to store TM for loading
16 * debug - OPTIONAL: Specify TRUE to enable debug log message
17 * and to keep intermediate tables
18 * mipurl - MIP URL to make rest API calls
19 * tgt_ticket - Specify generated TGT
20 *
21 * MACRO PARAMETERS FOR WORKGROUP SWITCHING:
22 * host outVarTicket restartLUA
23 * server authMethod outSuccess clearCache
24 * port outds outResponseStatus
25 *
26 *-----------------------------------------------------------------------------*/
27%macro irmst_load_trans_matrix_results(
28 run_name = ,
29 workgroup = ,
30 model_group_map = ,
31 function_package = work.rating_format,
32 scenario_meta = ,
33 tm_to_load = ,
34 debug = FALSE,
35 mipurl = ,
36 tgt_ticket = ,
37 host = ,
38 server = ,
39 port = ,
40 authMethod = token,
41 outds = work._tmp_workgroups_,
42 outVarTicket = ,
43 outSuccess = 0,
44 outResponseStatus = ,
45 restartLUA = Y,
46 clearCache = Y
47 ) / minoperator;
48
49 %local _debug_
50 model_sk;
51
52 /*-----------------------
53 * Align debug parameter
54 *-----------------------*/
55 %if %qupcase(&debug) in (Y YES 1 TRUE) %then
56 %let _debug_ = YES;
57 %else
58 %let _debug_ = NO;
59
60 /*----------------
61 * Get various SK
62 *----------------*/
63 proc sql noprint;
64 create table work.get_sks as
65 select distinct insttype,
66 model_group_sk,
67 tm_model_sk as model_sk
68 from &model_group_map;
69
70 select model_sk
71 into :model_sk
72 from work.get_sks;
73 quit;
74
75 /*-----------------
76 * Get TM table
77 *-----------------*/
78 %irmst_create_rating_formats(
79 tm_model_sk = &model_sk,
80 function_lib = %scan(&function_package,1,.),
81 package_name = %scan(&function_package,2,.),
82 debug = &_debug_,
83 mipurl = %superq(mipurl),
84 tgt_ticket = %superq(tgt_ticket),
85 host = &host,
86 server = &server,
87 port = &port,
88 workgroup = &workgroup,
89 authMethod = &authMethod,
90 outds = &outds,
91 outVarTicket = &outVarTicket,
92 outSuccess = &outSuccess,
93 outResponseStatus = &outResponseStatus,
94 restartLUA = &restartLUA,
95 clearCache = &clearCache
96 )
97
98 %irmst_build_tm_from_cube(
99 mi_cube_name = &run_name,
100 workgroup = &workgroup,
101 function_package = &function_package,
102 scenario_meta = &scenario_meta,
103 output_tbl = work.tbl_frm_cube,
104 debug = &_debug_,
105 mipurl = %superq(mipurl),
106 tgt_ticket = %superq(tgt_ticket)
107 )
108
109 proc transpose data = work.tbl_frm_cube
110 name = to_risk_rating
111 out = work.tbl_frm_cube_trans (rename = (col1 = pd_value
112 Evaldate = scenario_date
113 from_rating = from_risk_rating
114 mrskey = scenario_sk)
115 );
116 by run_instance_sk
117 insttype
118 mrskey
119 horizon
120 Evaldate
121 from_rating notsorted;
122 run;
123
124 /*--------------------------
125 * Create output table
126 *--------------------------*/
127 data work.tbl_frm_cube_trans_ordered;
128 length from_risk_rating
129 to_risk_rating $32;
130 set work.tbl_frm_cube_trans (drop = horizon);
131 format scenario_date date9.;
132 order_num = _n_;
133 run;
134
135 proc sql;
136 create table &tm_to_load as
137 select a.model_group_sk,
138 a.model_sk,
139 b.*
140 from work.get_sks as a,
141 work.tbl_frm_cube_trans_ordered as b
142 where upcase(a.insttype) eq upcase(b.insttype)
143 order by order_num;
144 quit;
145
146 /*---------------------
147 * Drop tables
148 *---------------------*/
149 %if %qupcase(&_debug_) eq NO %then
150 %do;
151 proc sql;
152 drop table work.get_sks,
153 work.tbl_frm_cube,
154 work.tbl_frm_cube_trans,
155 work.tbl_frm_cube_trans_ordered;
156 quit;
157 %end;
158
159%mend irmst_load_trans_matrix_results;