****************************************************************************************************
* PROGRAM OVERVIEW
****************************************************************************************************
*
* PROGRAM: baseline_expand_parameters.sas
* Created (mm/dd/yyyy): 11/19/2020
*
*--------------------------------------------------------------------------------------------------
* PURPOSE: This utility macro takes a macro variable that contains a space delineated list and/or
* covariates with a dash notation in the format COVAR#-COVAR# and expands the covariate list
* to use in a data step in ("var" "var") notation
*
* Program inputs:
* - Macro variable containing space delineated list
*
* Program outputs:
* - Macro variable containing each variable in the list in double quotes and separated by a space
*
* PARAMETERS:
* - var: macro variable to expand. This should be entered as the variable name without an ampersand
*
* Programming Notes:
*
*
*--------------------------------------------------------------------------------------------------
* CONTACT INFO:
* Sentinel Coordinating Center
* info@sentinelsystem.org
*
***************************************************************************************************;
%macro baseline_expand_parameters(var =);
%put =====> MACRO CALLED: baseline_expand_parameters;
%put Expanding macro variable &var = &&&var.;
/*initialize temporary variable*/
%let tempvar = ;
%if %length(&&&var.) > 0 %then %do;
%let countvars = %sysfunc(countw(%quote(&&&var), %str( )));
/*loop through each word. If '-' is used, then expand to each covar*/
%do count = 1 %to &countvars.;
%let word = %scan(%quote(&&&var),&count, %str( ));
%if %index(&word.,%str(-)) = 0 %then %do;
%if &count = 1 %then %do;
%let tempvar = "&word.";
%end;
%else %let tempvar = &tempvar. "&word.";
%end;
%else %do;
%let start = %sysfunc(substr(%scan(%quote(&word.),1,%str(-)), 6));
%let end = %sysfunc(substr(%scan(%quote(&word.),2,%str(-)), 6));
%do covar = &start. %to &end.;
%if &count = 1 and &covar = &start. %then %do;
%let tempvar = "COVAR&covar.";
%end;
%else %let tempvar = &tempvar. "COVAR&covar.";
%end;
%end;
%end;
/*Reassign to original macro variable*/
%let &var = &tempvar.;
%end;
%else %let &var ='';
%put Expanded macro variable &var. = &&&var.;
%put =====> END MACRO: baseline_expand_parameters;
%mend baseline_expand_parameters;