Here is my code to compute shapley value using Proc Reg selection=Rsquare and Proc IML procedure as suggested by Rick Wicklin %let dsn=; /*data set name*/ %let indepvar= ; /*list of independent variables separated with space*/ %let depvar=; /*dependent variable*/ %macro Shapley_value_regression; /*Count No of Independent Cariable*/ %local nvar list; %let nvar=1; %let list=%qscan(&indepvar,&nvar,%str( )); %do %while(&list ne); %let nvar=%eval(&nvar+1); %let list=%qscan(&indepvar,&nvar,%str( )); %end; %let nvar=%eval(&nvar-1); data _temp_; set &dsn; keep &indepvar &depvar; run; /*Rename Variables*/ data _temp_; set _temp_; rename %do i=1 %to &nvar; %let var&i=%sysfunc(scan(&indepvar,&i,' ')); &&var&i =x&i %end ; ; run; /*Reg with selection=rsquare*/ proc reg data=_temp_; ods select SubsetSelSummary; ods output SubsetSelSummary=RsquareValues; model &depvar=x1-x&nvar. /selection=rsquare; run; data RsquareValues; set RsquareValues; drop Dependent Model control Modelindex; data Null_Model; NumInModel =0; Rsquare=0; VarsInModel='x0'; proc append base=RsquareValues data=null_model; proc sort data=RsquareValues; by NumInModel VarsInModel; run; /*Shapley Value computation*/ %do i=1 %to &nvar; data R2_with_&i.( rename=(RSquare=Rsquare_with VarsInModel=x_with)) R2_without_&i. (drop =NumInModel rename=(RSquare=Rsquare_without VarsInModel=x_without)); set RsquareValues; if find(VarsInModel,"x&i") gt 0 then output R2_with_&i.; else output R2_without_&i.; run; data R2_delta_&i.; set R2_with_&i.; set R2_without_&i. ; run; data R2_delta_&i. (keep=x&i. NumInModel ); set R2_delta_&i.; x&i.=Rsquare_with-Rsquare_without; run; %end; data R2_delta; merge %do i=1 %to &nvar; R2_delta_&i. %end; ; rename %do i=1 %to &nvar; %let var&i=%sysfunc(scan(&indepvar,&i,' ')); x&i=&&var&i %end ; ; run; proc iml; use R2_delta; read all var {&indepvar} into delta; read all var {NumInModel} into NIM; p=ncol(delta); q=nrow(delta); sv=j(q,p,0); do j=1 to p; do i=1 to q; do m=1 to NIM[i,]; gamma=0; w=fact(NIM[i,]-1)#(fact(p-(NIM[i,]-1)-1)); w=w/fact(p); gamma=gamma+w; sv[i,j]=gamma#delta[i,j]; end; end; end; sv=SV[+,]`; RSquare=sv[+,]; Rname={&indepvar}; Cname={SV Var }; print SV [rowname=Rname colname=Cname] ; print RSquare ; create shapley_value var {Rname sv }; append; close shapley_value; quit; %MEND Shapley_value_regression; %Shapley_value_regression; proc print data=shapley_value;run; for details check this: http://predictive-analytics-world.blogspot.in/2013/06/shapley-value-regression-sas-macro.html
... View more