I neither know STATA nor do I know explicit details of the Mishkin test. However, for the problem as described on the page that you have linked to above, we can write a very short SAS program (compared to the STATA program which was given) that would fit the model and allow a test of whether one is operating in an efficient market. It should be noted that if the page that you linked to does not fully specify the model (for instance, if the residual v(t) is correlated with the residual v(t-1)), then the code presented below will not be appropriate.
Before proceeding to state the code, let me note that I the code presented below operates for the single predictor variable X and responses RETURN and EARN as employed in the linked page. You have written the model a bit differently (with more than one predictor and with specification of the equations for the responses seemingly reversed from what is described on the Judson Caskey page. You will have to revise the code that I present to accommodate differences between your model specification and the specification by Judson Caskey.
Also, let me note that for the solution which is proposed below, you will need to restructure a data set which has earnings and returns on one record so that a single response variable Y is employed with an indicator of whether the response Y represents returns or whether it represents earnings. We begin by restructuring the data.
data mydata_restruct;
set mydata;
record + 1;
x_tm1 = lag(x); /* Construct X(t-1) */
y = return; response='R'; output;
y = earn; response='E'; output;
run;
proc nlmixed data=mydata_restruct;
if response='R' then
eta = b*(earn - a0 - a1*x_tm1) + u_r;
else
eta = g0 + g1*x_tm1 + u_3;
model y ~ normal(eta, exp(2*log_sd_common));
random u_r,u_e ~ normal([0,0],
[exp(2*log_sd_rspec),0,
exp(2*log_sd_espec)]) subject=record;
contrast "Market Efficiency" a0-g0, a1-g1;
estimate "Var(v(t))" exp(2*log_sd_common) + exp(2*log_sd_rspec);
estimate "Var(u(t))" exp(2*log_sd_common) + exp(2*log_sd_espec);
estimate "Cov(v(t),u(t))" exp(2*log_sd_common);
estimate "Corr(v(t),u(t))" exp(2*log_sd_common) /
sqrt((exp(2*log_sd_common) + exp(2*log_sd_rspec)) *
(exp(2*log_sd_common) + exp(2*log_sd_espec)));
run;
The above code is completely untested. However, it is fairly simple code to construct, so it should be pretty good code. Do you have access to some data where results have already been provided so that you could test the above model? If there are any other requirements for the model (such as serially correlated residuals), then the above code (as previously noted) would not be sufficient.