1%macro irmst_apply_agg_bep( ds_in_agg_values =
20 , :tgt_tbl separated by
' '
21 from &ds_in_agg_rules.;
26 set &ds_in_agg_values. (obs=0);
27 keep &src_keep_var_list.;
29 proc contents data=headers noprint out=meta_headers (keep=name type);
36 , :src_keep_var_list separated by
' '
37 , :types separated by
' '
42 set &ds_in_agg_rules.;
43 src_where_cond=prxchange(
's/([a-zA-Z])(\s*[=])/$1 $2/',-1, src_where_cond);
49 set agg_rules_cnf (firstobs=&i. obs=&i.);
51 call symputx(
"src_where_cond_&i.", src_where_cond);
52 call symputx(
"tgt_tbl_id_val&i.", tgt_tbl_id_val);
53 call symputx(
"tgt_tbl_val_col_&i.", tgt_tbl_val_col);
54 call symputx(
"tgt_col_&i.", tgt_tbl_id_col);
55 call symputx(
"src_col_&i.",trim(src_col)||
'_'||trim(aggregation_rule));
58 call symputx(
"agg_val_&i.",
'a');
61 %
do ii=1 %to &n_forecast_time;
64 length enriched_whre_stmt $1000
68 enriched_whre_stmt=
"' "||
"&&src_where_cond_&i."||
"'";
69 cum=
"&&src_where_cond_&i.";
70 do j=1 to countw(
"&src_keep_var_list.",
' ');
71 word=upcase(scan(
"&src_keep_var_list.",j,
' '));
72 word_type=scan(
"&types.",j,
' ');
73 present=findw(upcase(enriched_whre_stmt),word,
'',
'R');
75 if word_type=2 then
do;
76 temp=trim(word)||
"=''";
77 cum=catx(
" and ",trim(cum),trim(temp));
80 temp=trim(word)||
"= .";
81 cum=catx(
" and ",trim(cum),trim(temp));
85 call symputx(
"fnl_where_stmt_&ii.",trim(cum));
87 %let agg_val_&i._&ii.=;
90 id1=prxparse(
'/[><]/');
91 id2=prxparse(
'/ [lg]t /');
92 match1=prxmatch(id1,
"&&fnl_where_stmt_&ii.");
93 match2=prxmatch(id2,
"&&fnl_where_stmt_&ii.");
94 call symputx(
'match',max(match1,match2));
97 %let type_agg=%scan(&&src_col_&i.,-1,
'_');
99 set &ds_in_agg_values.;
100 where &&fnl_where_stmt_&ii. and forecast_time=&ii.;
102 proc summary data=temp_tbl;
104 output out=rslt &type_agg.=&&src_col_&i.;
108 call symputx(
"agg_val_&i._&ii.",&&src_col_&i.);
113 set &ds_in_agg_values.;
114 where &&fnl_where_stmt_&ii. and forecast_time=&ii.;
115 call symputx(
"agg_val_&i._&ii.",&&src_col_&i.);
124 %
do ll=1 %to &n_forecast_time;
125 %
if %sysevalf(%superq(agg_val_&l._&ll.) ne,
boolean) %then %
do;
126 update &ds_out_agg_result.
127 set &&tgt_tbl_val_col_&l.= &&agg_val_&l._&ll.
128 where &&tgt_col_&l. eq
"&&tgt_tbl_id_val&l."
129 and forecast_horizon = &&ll.;