/*-------------------------------------------------------------------------------- Macro XTOP Author : Carina Ortseifen (carina.ortseifen@urz.uni-heidelberg.de) Version : 2.0 (08.04.98) Subject : Calculation of x**Pi**m = m*PMAX new variables Arguments : var = variable x pref= prefix for generated variables m = degree of highest fractional polynomial Result : PMAX*m variables var**P1, var**P2 ... var**P(PMAX), var**P1*log(var) ... var**P(PMAX)*log(var), var**P1*log(var)**2 ... var**P(PMAX)*log(var)**(m-1) with var**i=boxtid(var,i) Hints : macro variables PMAX and Pi must exist, usage of this macro only inside a data step Example : * Sample data sets a and b; data a; do x=1 to 10; output; end; run; * Generation of macro variables; %let pmax=3; %let p1=-2; %let p2=0.5; %let p3=2; * Use of macro xtop; %inc 'd:\fracpoly\pgms\boxtid.sas'; data b; set a; %xtop(x,_,2); run; * Output of data set b with 6 new variables; proc print data=b; var x x_1-x_6; run; --------------------------------------------------------------------------------*/ %macro xtop(var,pref,m); %local i j k xtop; %do i=1 %to &pmax; %* Loop for powers Pi; %do j=1 %to &m; %* Loop for degree m; %let k=%eval(&i+&pmax*(&j-1)); %* New variables; &var&pref&k=(%boxtid(&var,&&&p&i)) %if (&j gt 1 and &var ne 0) %then *(log(&var)**%eval(&j-1));; %end; %end; %mend xtop;