Generating indicators from factor variable defined in SAS datafile using a generic procedure in three steps. The code is easy to modify to suite more complicated needs.
Produce table with factor levels
Use data step to generate program
Append indicators by running SAS data step using %include
An example of generative programming…
proc sql; create table levels_data_set_name as select distinct factor_variable_name as indicator_name from input_data_set_name; quit; data _NULL_; file ‘C:\PATH_TO_GENERATED_SAS_PROGRAM\indicators.sas’; put ‘data somelib.indicator_enriched_data_set;’; put ‘set input_data_set_name;’; run; data _NULL_; set levels_data_set_name; file ‘C:\PATH_TO_GENERATED_SAS_PROGRAM\indicators.sas’ MOD; length char_var $256; char_var=’ind’||strip(indicator_name)||’=’; put char_var; char_var='(‘||strip(factor_variable_name)||’ EQ ‘||strip(indicator_name)||'”);’; put char_var; run; data _NULL_; file ‘C:\PATH_TO_GENERATED_SAS_PROGRAM\indicators.sas’ MOD; put ‘run;’; run; %include ‘C:\PATH_TO_GENERATED_SAS_PROGRAM\indicators.sas’; Fetch the code above as SAS program file: GenerateIndicators.SAS
I is also possible to make a simple macro using the code above (ensure you have write access to C:\)
%macro factor2indicators(factor,dataset);
proc sql;
create table levels_data_set_name as
select distinct &factor as indicator_name
from &dataset;
quit;
data _NULL_;
file ‘C:\indicators.sas’;
put ‘data temp_data;’;
put ‘set &dataset;’;
run;
data _NULL_;
set levels_data_set_name;
file ‘C:\indicators.sas’ MOD;
length char_var $256;
char_var=’ind’||strip(indicator_name)||’=’;
put char_var;
char_var='(‘||strip(&factor)||’ EQ “‘||strip(indicator_name)||'”);’;
put char_var;
run;
data _NULL_;
file ‘C:\indicators.sas’ MOD;
put ‘run;’;
run;
%include ‘C:\indicators.sas’;
data &dataset;
set temp_data;
run;
%mend;
Comments