Hi,
I am trying to calculate the Probability of Informed Trading (PIN) using the codes provided by WRDS. However, i am getting some warnings and error messages in running the codes. Here are samples of warnings and error messages:
ERROR: Execution Errors for _OBS_= 209 :
ERROR: There are references to missing variables when the program code is executed for _OBS_= 209
WARNING: Your program statements cannot be executed completely.
WARNING: In a total of 312 calls an error occurred during execution of the program statements. NLP attempted to recover by using a
shorter step size.
The codes that i am using are the followings:
options ls=132 ps=max nocenter nodate nonumber fullstimer;
proc sort data=buysell; by RIC; run;
/*--------------------------------------------------------------------*/
/* This is the procedure used to maximize the log-likelihood function specified below. */
/* This particular factorization of the log-likelihood function appears in the paper Easley, David, Robert F. Engle, Maureen O'Hara, and Liuren Wu, 2001, "Time-Varying Arrival Rates of Informed and Uninformed Trades", AFA 2002 Atlanta Meetings, Available at SSRN: http://ssrn.com/abstract=294870 */
/*--------------------------------------------------------------------*/
proc nlp data=buysell noprint out=work.pinest (keep = RIC ALPHA ETA MU);
by RIC;
max loglik;
decvar ALPHA, DELTA, ETA, MU;
M = min(buys,sells) + max(buys,sells) / 2.0 ;
x = eta / (mu + eta) ;
bounds 0.0 < eta mu, 0.0 <= alpha delta <= 1.0 ;
loglik = -2.0 * eta + M * log(x) + (buys + sells) * log(mu + eta) +
log( alpha * (1.0 - delta) * exp(-1.0 * mu) * (x ** (sells - M )) +
alpha * delta * exp(-1.0 * mu) * (x ** (buys - M)) +
(1.0 - alpha) * (x ** (buys + sells - M)) ) ;
run;
proc sort data = work.pinest nodupkey;
by RIC;
run;
data work.pinest; set work.pinest;
PIN = alpha * mu / (alpha * mu + 2.0 * eta) ;
label pin = 'Probability of informed trading' ;
format pin 5.3 ;
run;
I have no clues how to resolve the issue. Can someone please help? I have added sample data in the attached data section. Thanks.
Have you looked at observation 209 in your data set?
If either mu or eta have a missing value then x = eta / (mu + eta) ; is performing a divide by missing value as (mu + eta) would be missing.
If eta=0 then x would be 0 and the LOG(x) is undefined in the LOGLIK calculation.
Similar log( alpha * (1.0 - delta) * exp(-1.0 * mu) * (x ** (sells - M )) is undefined if delta=1: 1-delta would be 0 and the 0 is multiplied by the other bits so the result is 0 and Log(0) again
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.