Rick,
The following is my code (using smooth bootstrap method) .
Also could get good result.

%let n=1000000;
proc iml;
Quantile = {0 , 0.15, 0.31, 0.52, 0.77, 1};
Estimate = {2 , 25, 50, 100, 250, 30000};

n=nrow(Quantile);
bin_value=j(n-1,1);
bin_width=j(n-1,1);
p=j(n-1,1);
do i=1 to n-1;
bin_value[i]=Estimate[i];
bin_width[i]=Estimate[i+1]-Estimate[i];
p[i]=Quantile[i+1]-Quantile[i];
end;
print Quantile Estimate bin_value bin_width p;
call randseed(123456789);
_bin_value=sample(bin_value,&n,'replace',p);
_bin_width=j(&n,1);
do j=1 to &n;
_bin_width[j]=bin_width[loc(bin_value=_bin_value[j])];
end;

eps=randfun(&n,'uniform');
idx=loc(_bin_value=250); /*250 is from Estimate*/
eps[idx]=eps[idx]##40 ; /*40 is different try for matching true mean(291)*/

value=_bin_value`+floor(_bin_width#eps);
/*call histogram(value[loc(value<1000)]) label="Simulation Amount < $1000" ;*/
call qntl(SimEst, value, Quantile);
print Quantile[F=percent6.] Estimate SimEst[F=5.1];

create want var{value};
append;
close;
quit;

proc means data=want Min Mean Median Max ndec=2;
var value;
run;

Analysis Variable : VALUE
Minimum Mean Median Maximum
2.00 292.57 95.00 29995.00