/*------------------------------------------------------------------------------- FUNCtional ForM: funcfm.sas This macro is called by mfp8.sas. Exponent values are added to the variable names and the new, completed variable names are written into a new column of the result table. Sylvia Waser / IMBI, May 2003 Version 1.0 -------------------------------------------------------------------------------*/ %macro funcfm(pw, pmax, model); data linear; set work.aus1 (drop= status alpha deviance rename= (varname= variable)); where fform = 0; length newname $40; newname = trim(variable); run; data fstdegr; set work.aus1 (drop= status alpha deviance rename= (varname= variable)); where fform = 1 or fform = 2; length newname $40; %do i1 = 1 %to &pmax; %let val&i1= %scan(&pw,&i1,%str( )); if p1 = &i1 then do; if &&val&i1 = 1 then newname = trim(variable); if &&val&i1 = 0 then newname = 'log(' || trim(variable) || ')'; if &&val&i1 ne 0 and &&val&i1 ne 1 then newname = trim(variable) || '^(' || trim(left(&&val&i1)) || ')'; end; %end; run; data secdegr; set work.aus1 (drop= status alpha deviance rename= (varname= variable)); where fform = 2; length newname $40; %do i1 = 1 %to &pmax; %let val&i1= %scan(&pw,&i1,%str( )); if p2 = &i1 then do; if &&val&i1 = 1 then newname = trim(variable); if &&val&i1 = 0 then newname = 'log(' || trim(variable) || ')'; if &&val&i1 ne 0 and &&val&i1 ne 1 then newname = trim(variable) || '^(' || trim(left(&&val&i1)) || ')'; end; %end; if p1 = p2 then newname = trim(newname) || '*log(' || trim(variable) || ')'; number=number+0.5; run; data lfs; set linear fstdegr secdegr; run; %if &model ne S %then %do; data tinter; newname="Intercept"; number=1; run; data lfs; set lfs tinter; run; %end; proc sort data= lfs out= lfs; by number; run; data final; length variable $40; merge lfs work.aus2; drop fform p1 p2; variable = newname; run; data work.aus2; set final; drop newname number; run; %mend funcfm; /*------------------------------------------------------------------------------- call funcfm -------------------------------------------------------------------------------*/ /*%funcfm(-2 -1 -0.5 0 0.5 1 2 3, 8);*/