* read shape and data; PROC IMPORT OUT=Shape DATAFILE="....../SHAPE.csv" dbms=dlm replace; delimiter=","; getnames=yes; run; PROC IMPORT OUT=Data DATAFILE="....../DATA.csv" dbms=dlm replace; delimiter=","; getnames=yes; run; %let gridsize; %let gridsize=100; *min max from shape; PROC Sql; SELECT MAX(X), MIN(X), MAX(Y), MIN(Y) INTO :maximumX, :minimumX, :maximumY, :minimumY FROM shape; %let maxX=&maximumX; %let minX=&minimumX; %let maxY=&maximumY; %let minY=&minimumY; QUIT; * calculate bwm plug-in; proc iml; use data; read all var {X Y FREQ} into xy; n=sum(xy[,3]); stdx=std(xy[,1])/(n**(1/6)); call symput("stdxg", char(stdx)); stdy=std(xy[,2])/(n**(1/6)); call symput("stdyg", char(stdy)); quit; %put &stdxg &stdyg; ods graphics on; ods select none; ods output ContourPlot = _KDE_data; proc kde data=data; bivar (X (bwm=&stdxg ngrid=&gridsize gridl=&minX gridu=&maxX ) Y (bwm=&stdyg ngrid=&gridsize gridl=&minY gridu=&maxY )) / plots=all; freq FREQ; run; ods graphics off; ods select all; ods select none;