options crt; ? 8e1 freq a; in orange; smpl 1910,1941 1947,1959; dot rev inc qty curadv aveadv; l. = log(.); enddot; olsq lrev c lqty linc lcuradv laveadv; ? (a) ? ? Here is a direct way to do the nonlinear version ? (not actually used except if you don't have TSP 4.2B or later) ? proc hardway; frml e852 lrev = cc + (1 + 1/eta)*lqty - (beta/eta)*linc - (gamma/eta)*lcuradv - (delta/eta)*laveadv; unmake @coef cc te beta gamma delta; set eta = 1/(te-1); ? these transformations of the OLS coefficients dot beta gamma delta; ? yield the nonlinear coefs as "starting" values set . = - . * eta; enddot; param cc eta beta gamma delta; lsq e852; endproc; ? ? Here is an easier way, using ANALYZ (assuming you have TSP 4.2B or later) ? frml n1 eta = 1/(c-1); frml n2 beta = linc/(1-c); frml n3 gamma = lcuradv/(1-c); frml n4 delta = laveadv/(1-c); analyz n1-n4; ? (a-optional) ? lpri = lrev - lqty; olsq lpri c lqty linc lcuradv laveadv; ? (b) ? olsq lqty c lpri linc lcuradv laveadv; ? (d) ? lcpi = log(cpi); olsq lqty c linc lcuradv laveadv lcpi; lqtyfit = @fit; olsq lrev c lqty linc lcuradv laveadv lqtyfit; olsq lpri c lqty linc lcuradv laveadv lqtyfit; ? (e) ? 2sls(inst=(c,linc,lcuradv,laveadv,lcpi)) lpri c lqty linc lcuradv laveadv; ? (f) ? olsq lpri c lqtyfit linc lcuradv laveadv; ? (g)