data BlackScholes; input S K r q v T; d1 = (log(S/K) + (r-q+v**2/2)*T)/v/sqrt(T); d2 = d1 - v*sqrt(T); BSCall = S*exp(-q*T)*cdf('normal',d1) - K*exp(-r*T)*cdf('normal',d2); BSPut = BSCall - exp(-q*T)*S + K*exp(-r*T); label S = 'Spot' K = 'Strike' r = 'Rate' q = 'Div Yield' v = 'Volatility' T = 'Maturity' ; cards; 100 100 .02 .01 .30 0.25 100 100 .02 .01 .30 0.50 100 100 .02 .01 .30 0.75 100 100 .02 .01 .30 1.00 100 90 .02 .01 .30 0.25 100 90 .02 .01 .30 0.50 100 90 .02 .01 .30 0.75 100 90 .02 .01 .30 1.00 90 100 .02 .01 .30 0.25 90 100 .02 .01 .30 0.50 90 100 .02 .01 .30 0.75 90 100 .02 .01 .30 1.00 ; proc print label; var S K r q v T BSCall BSPut; run;