Here's an answer to my own question. The following code can be used as part of a SAS Code Node. It accesses the interactive grouping labels that are produced by a preceding interactive grouping node, and creates a format for each of the variables that were grouped. The labels can then be accessed by applying the format to the corresponding GRP_ variable. * Get Interactive Grouping Node ID;
%EM_PATH (nodeid=&em_nodeid. , outds=all_nodes , nodes=PATH);
data ign_node;
set all_nodes (where=(component="IGN"));
run;
data ign_node;
set ign_node;
by component;
if last.component;
run;
proc sql;
select nodelabel into :ign_nodeid from ign_node;
quit;
* Create formats from the data table. The _Z is to avoid invalid formats ending in numbers;
proc sql;
create table fmt_input as
select compress("F_"||substrn(_grp_variable_,5,100)||"_Z") as fmtname,
_group_ as start,
_label_ as label
from &em_lib..%sysfunc(cats(%CMPRES(&ign_nodeid.),_stats)) a
left join &em_lib..%sysfunc(cats(%CMPRES(&ign_nodeid.),_varmappings)) b on b._variable_ = a.display_var
where a.display_var is not null
;
quit;
PROC FORMAT CNTLIN=fmt_input;
* Test code something like this;
data test;
set &em_import_data. (obs=20);
label_myvar = put(GRP_myvar,F_myvar_Z.);
run;
proc print data=test;
var GRP_myvar label_myvar;
run;
... View more