I have written a macro that accepts a list of variables, runs a proc mixed model using each variable as a predictor, and then exports the results to a dataset with the variable name appended to it. I am trying to figure out how to stack the results from all of the variables in a single data set.
Here is the macro:
%macro cogTraj(cog,varlist); %let j = 1; %let var = %scan(&varlist, %eval(&j)); %let solution = sol; %let outsol = &solution.&var.; %do %while (&var ne ); proc mixed data = datuse; model &cog = &var &var*year /solution cl; random int year/subject = id; ods output SolutionF = &outsol; run; %let j = %eval(&j + 1); %let var = %scan(&varlist, %eval(&j)); %let outsol = &solution.&var.; %end; %mend; /* Example */ %cogTraj(mmmscore, varlist = bio1 bio2 bio3);
The result would be the creation of Solbio1, Solbio2, and Solbio3.
I have created a macro variable containing the "varlist" (Ideally, I'd like to input a macro variable list as the argument but I haven't figured out how to deal with the scoping):
%let biolist = bio1 bio2 bio3;
I want to stack Solbio1, Solbio2, and Solbio3 by using text manipulation to add "Sol" to the beginning of each variable. I tried the following, outside of any data step or macro:
%let biolistsol = %add_string( &biolist, Sol, location = prefix);
Ultimately, I want to do something like this;
data Solbio_stack; set %biolistsol; run;
with the result being a single dataset in which Solbio1, Solbio2, and Solbio3 are stacked, but I'm sure I don't have the right syntax.
Can anyone help me with the text string/dataset stacking issue? I would be extra happy if I could figure out how to change the macro to accept %biolist as the argument, rather than writing out the list variables as an argument for the macro.