* SAS code for section 3.2 -- Default Knots; * default_knots.macro; %macro default_knots(librefknots=,data=,knotdata=,varknots=,numknots=); proc sort data=&data (keep=&varknots) out=q1; by &varknots; run; data q2; set q1; by &varknots; if first.&varknots; run; data &librefknots..&knotdata; set q2 nobs=n; knotsp=int(n/5); if knotsp>=35 then kmx=35; else if knotsp<35 then kmx=knotsp; %if &numknots ne %then %do; ktemp=&numknots; if 1 <= ktemp <= 35 then kmx=ktemp; %end; kintrvl=round(n/kmx); knotsok=mod(_n_,kintrvl); knots=&varknots; if knotsok=0 or _n_=n-1 then output; *also want the obs next to last one; keep knots; run; %mend;