Example 4 for PROC QUANTSELECT

```/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: qrsex4                                              */
/*   TITLE: Example 4 for PROC QUANTSELECT                      */
/*    DESC: Surface Fitting with Many Noisy Variables           */
/*     REF:                                                     */
/*                                                              */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: Quantile Regression Model Selection                 */
/*   PROCS: QUANTSELECT                                         */
/*                                                              */
/* SUPPORT: Yonggang Yao                                        */
/****************************************************************/

%let p=10;
data artificial;
drop i;
array x{&p};
do i=1 to 400;
do j=1 to &p;
x{j} = ranuni(1);
end;
yTrain = 40*exp(8*((x1-0.5)**2+(x2-0.5)**2))/
(exp(8*((x1-0.2)**2+(x2-0.7)**2))+
exp(8*((x1-0.7)**2+(x2-0.2)**2)))+rannor(1);
output;
end;

yTrain = .;
do x1=0 to 1 by 0.01;
do x2 = 0 to 1 by 0.01;
y = 40*exp(8*((x1-0.5)**2+(x2-0.5)**2))/
(exp(8*((x1-0.2)**2+(x2-0.7)**2))+
exp(8*((x1-0.7)**2+(x2-0.2)**2)));
output;
end;
end;
run;

%macro art;
proc quantselect data=artificial algorithm=smooth;
%do i=1 %to &p;
effect sp&i = spline(x&i);
%end;
model yTrain =
sp1 %do i=2 %to &p; |sp&i %end; @2/details=all;
output out=Out p=pred;
run;
%mend;

%art;

ods graphics on;
data pred;
set out;
where yTrain=.;
run;

%let off0 = offsetmin=0 offsetmax=0;
%let off0 = xaxisopts=(&off0) yaxisopts=(&off0);
%let eopt = location=outside valign=top textattrs=graphlabeltext;
proc template;
define statgraph surfaces;
begingraph / designheight=360px;
layout lattice/columns=2;
layout overlay / &off0;
entry "True Model" / &eopt;
contourplotparm z=y y=x2 x=x1;
endlayout;
layout overlay / &off0;
entry "Fitted Model" / &eopt;
contourplotparm z=pred y=x2 x=x1;
endlayout;
endlayout;
endgraph;
end;
run;

proc sgrender data=pred template=surfaces;
run;

```