Guest User

Untitled

a guest
Apr 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.71 KB | None | 0 0
  1. matrix z has not been set to a value
  2. no data set is currently open for output
  3. File WORK.MYDATA2.DATA does not exist
  4.  
  5. DATA allsamp0;
  6.  
  7. SET sample;
  8.  
  9. RUN;
  10.  
  11.  
  12.  
  13. %macro loop;
  14.  
  15.  
  16.  
  17. DATA test;
  18.  
  19. SET sample1;
  20.  
  21. IF ext_opt = 0 THEN ext_opt = .0001;
  22.  
  23. ylow = LOG(debt_face);
  24.  
  25. KEEP csho t_debt va siga debt_face exp_rf rf_net exp_divex exp_rfex x lambda ext_opt ylow;
  26.  
  27. RUN;
  28.  
  29.  
  30.  
  31. DATA test;
  32.  
  33. RETAIN csho t_debt va siga debt_face exp_rf rf_net exp_divex exp_rfex x lambda ext_opt ylow;
  34.  
  35. SET test;
  36.  
  37. KEEP csho t_debt va siga debt_face exp_rf rf_net exp_divex exp_rfex x lambda ext_opt ylow;
  38.  
  39. RUN;
  40.  
  41.  
  42.  
  43. * Read data into IML ;
  44.  
  45. PROC IML;
  46.  
  47. USE test;
  48.  
  49. READ all var _ALL_ into B;
  50.  
  51. CLOSE close test;
  52.  
  53.  
  54.  
  55. csho = B[1,1];
  56.  
  57. t_debt = B[1,2];
  58.  
  59. va = B[1,3];
  60.  
  61. siga = B[1,4];
  62.  
  63. debt_face = B[1,5];
  64.  
  65. exp_rf = B[1,6];
  66.  
  67. rf_net = B[1,7];
  68.  
  69. exp_divex= B[1,8];
  70.  
  71. exp_rfex = B[1,9];
  72.  
  73. x = B[1,10];
  74.  
  75. lambda = B[1,11];
  76.  
  77. ext_opt = B[1,12];
  78.  
  79. ylow = B[1,13];
  80.  
  81.  
  82.  
  83. /* Define the integr/
  84.  
  85.  
  86.  
  87. START FUN(y) GLOBAL (va, rf_net, siga, t_debt, debt_face, csho, x, exp_divex, exp_rf, exp_rfex, lambda, ext_opt, vd, ylow);
  88.  
  89.  
  90.  
  91. IF ext_opt = 0 THEN ext_opt = .0001;
  92.  
  93.  
  94.  
  95. f1d = (y - LOG((debt_face + csho * x)) + (rf_net + 0.5 * siga**2) * ext_opt) / (siga * SQRT(ext_opt));
  96.  
  97. f2d = f1d - (siga * SQRT(ext_opt)) ;
  98.  
  99.  
  100.  
  101. opt = (EXP(y) * exp_divex * PROBNORM(f1d) - (debt_face + csho * x) * exp_rfex * PROBNORM(f2d)) ;
  102.  
  103.  
  104.  
  105. mu = LOG(va) + (rf_net - 0.5 * siga**2) * t_debt;
  106.  
  107. sigma = siga * SQRT(t_debt);
  108.  
  109. a0 = (LOG(debt_face + csho * x) -mu) / sigma;
  110.  
  111.  
  112.  
  113. pdf = EXP(-((y - mu)**2/(2 * sigma**2))) / (SQRT (2 * CONSTANT('PI')) * sigma);
  114.  
  115.  
  116.  
  117. pre = lambda * exp_rf;
  118.  
  119. int = pre * opt* pdf;
  120.  
  121.  
  122.  
  123. return(int);
  124.  
  125. finish;
  126.  
  127.  
  128.  
  129. /*
  130.  
  131. SAS does not like very low lower bounds. no value if 2 std below face?
  132.  
  133. */
  134.  
  135.  
  136.  
  137. mu = LOG(va) + (rf_net - 0.5 * siga**2) * t_debt;
  138.  
  139. sigma = siga * SQRT(t_debt);
  140.  
  141. yhigh = mu + 5 * sigma;
  142.  
  143. mid = (yhigh + ylow) / 2;
  144.  
  145. call quad(z, "fun", ylow || yhigh) peak= mid;
  146.  
  147.  
  148.  
  149. create MyData2 from z;
  150.  
  151. append from z;
  152.  
  153. close MyData2;
  154.  
  155. quit ;
  156.  
  157.  
  158.  
  159. DATA MyData2;
  160.  
  161. SET MyData2;
  162.  
  163. RENAME COL1 = w_later;
  164.  
  165. RUN;
  166.  
  167.  
  168.  
  169. DATA new;
  170.  
  171. SET MyData2;
  172.  
  173. RUN;
  174.  
  175.  
  176.  
  177. %mend loop;
  178.  
  179.  
  180.  
  181. %macro bigloop ;
  182.  
  183.  
  184.  
  185. %DO i=1 %TO &nobs;
  186.  
  187. DATA sample;
  188.  
  189. SET allsamp0;
  190.  
  191. IF observ = &i;
  192.  
  193.  
  194.  
  195. PROC SORT;
  196.  
  197. BY co_per_rol year;
  198.  
  199. RUN;
  200.  
  201.  
  202. DATA allsamp;
  203.  
  204. SET sample;
  205.  
  206. RUN;
  207.  
  208.  
  209.  
  210. /*
  211.  
  212. solve for va, siga numerically
  213.  
  214. */
  215.  
  216. %macro newton ;
  217.  
  218.  
  219.  
  220. %LET tol = 0.00000001;
  221.  
  222. %LET absg = 1;
  223.  
  224.  
  225.  
  226. %DO iter = 1 %TO 100;
  227.  
  228. %IF &absg <= &tol %THEN %GOTO leave;
  229.  
  230.  
  231.  
  232. DATA sample1;
  233.  
  234. SET sample;
  235.  
  236. ext_opt = t_opt - t_debt;
  237.  
  238. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  239.  
  240. RUN;
  241.  
  242.  
  243.  
  244. %loop;
  245.  
  246.  
  247.  
  248. DATA new;
  249.  
  250. SET new;
  251.  
  252. w_later = w_later;
  253.  
  254. RUN;
  255.  
  256.  
  257.  
  258. DATA sample;
  259.  
  260. MERGE sample new;
  261.  
  262. RUN;
  263.  
  264.  
  265.  
  266. PROC DATASETS NOLIST;
  267.  
  268. DELETE new MYDATA2 test;
  269.  
  270. QUIT;
  271.  
  272. RUN;
  273.  
  274.  
  275.  
  276. /*
  277.  
  278. solving for derivatives in va
  279.  
  280. */
  281.  
  282. DATA sample;
  283.  
  284. SET sample;
  285.  
  286. inc = 0.0000001;
  287.  
  288. RUN;
  289.  
  290.  
  291.  
  292. DATA sample1;
  293.  
  294. SET sample;
  295.  
  296. va = va + inc;
  297.  
  298. ext_opt = t_opt - t_debt;
  299.  
  300. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt ;
  301.  
  302. RUN;
  303.  
  304.  
  305.  
  306. PROC DATASETS NOLIST;
  307.  
  308. DELETE new MYDATA2 test;
  309.  
  310. QUIT;
  311.  
  312. RUN;
  313.  
  314.  
  315.  
  316. %loop ;
  317.  
  318.  
  319.  
  320. DATA new;
  321.  
  322. SET new;
  323.  
  324. w_later_up = w_later;
  325.  
  326. DROP w_later;
  327.  
  328. RUN;
  329.  
  330.  
  331.  
  332. DATA sample;
  333.  
  334. MERGE sample new;
  335.  
  336. warr_delta = optosey * (w_later_up - w_later) / inc;
  337.  
  338.  
  339.  
  340. dd = (LOG(va / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  341.  
  342. dd1 = dd - (siga * SQRT(t_debt));
  343.  
  344.  
  345.  
  346. debt_bs = debt_face * EXP(-r_debt * t_debt) * (1 - PROBNORM(-dd + siga * SQRT(t_debt)) ) + va * exp_div * PROBNORM(-dd);
  347.  
  348. eqcall = (va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1)) + va * (1 - exp_div);
  349.  
  350.  
  351.  
  352. tva = va + inc;
  353.  
  354. dd = (LOG(tva / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  355.  
  356. dd1 = dd - (siga * SQRT(t_debt));
  357.  
  358. debt_bs_up = debt_face * EXP(-r_debt*t_debt) * (1 - PROBNORM(-dd + siga * SQRT(t_debt)) ) + tva * exp_div * PROBNORM(-dd);
  359.  
  360. debt_delta = (debt_bs_up - debt_bs) / inc;
  361.  
  362. stk_delta = 1 - debt_delta - warr_delta;
  363.  
  364.  
  365.  
  366. eqcall1 = tva * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1) + tva * (1 - exp_div);
  367.  
  368. eq_delta=(eqcall1 - eqcall)/inc ;
  369.  
  370. RUN;
  371.  
  372.  
  373.  
  374. DATA sample;
  375.  
  376. SET sample;
  377.  
  378. g1 = mve + optosey * w_later - eqcall;
  379.  
  380. g2 = siga * (va / mve) * stk_delta - sige;
  381.  
  382.  
  383.  
  384. dg1a = warr_delta - eq_delta;
  385.  
  386. dg2a = siga * (1 / mve) * stk_delta;
  387.  
  388. dg2b = (va / mve) * stk_delta;
  389.  
  390. DROP tva debt_bs_up w_later_up inc;
  391.  
  392. RUN;
  393.  
  394.  
  395.  
  396. /*
  397.  
  398. now derivatives wrt siga
  399.  
  400. */
  401.  
  402. DATA sample;
  403.  
  404. SET sample;
  405.  
  406. inc = 0.0000001;
  407.  
  408. RUN;
  409.  
  410.  
  411.  
  412. DATA sample1;
  413.  
  414. SET sample;
  415.  
  416. siga = siga + inc;
  417.  
  418. ext_opt=t_opt - t_debt;
  419.  
  420. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt eqcall;
  421.  
  422. RUN;
  423.  
  424.  
  425.  
  426. PROC DATASETS NOLIST;
  427.  
  428. DELETE new MYDATA2 test ;
  429.  
  430. QUIT;
  431.  
  432. RUN;
  433.  
  434.  
  435.  
  436. %loop;
  437.  
  438.  
  439.  
  440. DATA new;
  441.  
  442. SET new ;
  443.  
  444. w_later_up = w_later;
  445.  
  446. DROP w_later;
  447.  
  448. RUN;
  449.  
  450.  
  451.  
  452. DATA sample;
  453.  
  454. MERGE sample new;
  455.  
  456. warr_dsig = optosey * (w_later_up - w_later) / inc;
  457.  
  458.  
  459.  
  460. dd =(LOG( va / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  461.  
  462. dd1 = dd - (siga * SQRT(t_debt));
  463.  
  464. eqcall = (va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1) + va * (1 - exp_div));
  465.  
  466.  
  467.  
  468. tsiga = siga + inc;
  469.  
  470. dd =(LOG( va / debt_face) + (rf_net + 0.5 * tsiga**2) * t_debt) / (tsiga * SQRT(t_debt));
  471.  
  472. dd1 = dd - (tsiga * SQRT(t_debt));
  473.  
  474. eqcall1 = (va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1) + va * (1 - exp_div));
  475.  
  476.  
  477.  
  478. call_dsig = (eqcall1 - eqcall) / inc;
  479.  
  480. RUN;
  481.  
  482.  
  483.  
  484. DATA sample ;
  485.  
  486. SET sample ;
  487.  
  488. old_va = va;
  489.  
  490. old_siga = siga;
  491.  
  492. dg1b = warr_dsig - call_dsig;
  493.  
  494.  
  495.  
  496. det = 1 / ((dg1a * dg2b) - (dg1b * dg2a));
  497.  
  498.  
  499.  
  500. va = va - det * ((dg2b*g1) - (dg1b * g2));
  501.  
  502. IF va < 0 THEN va = old_va;
  503.  
  504. siga = siga - det * ( -(dg2a*g1) + (dg1a * g2));
  505.  
  506. IF siga < 0 THEN siga = old_siga;
  507.  
  508.  
  509.  
  510. gtg = g1 * g1 + g2 * g2;
  511.  
  512. absg = sqrt(gtg);
  513.  
  514. j = &iter ;
  515.  
  516. RUN;
  517.  
  518.  
  519.  
  520. DATA _null_;
  521.  
  522. SET sample;
  523.  
  524. call symput('absg', strip(put(absg,8.)) );
  525.  
  526. RUN;
  527.  
  528.  
  529.  
  530. %end;
  531.  
  532.  
  533.  
  534. %leave:
  535.  
  536. DATA sample;
  537.  
  538. SET sample;
  539.  
  540. absg = &absg;
  541.  
  542. j = j + 1;
  543.  
  544. RUN;
  545.  
  546.  
  547.  
  548. %mend newton;
  549.  
  550.  
  551.  
  552. %newton;
  553.  
  554.  
  555.  
  556. /*
  557.  
  558. now have va and siga -- solve warrant value and vega
  559.  
  560. */
  561.  
  562.  
  563.  
  564. DATA allsamp;
  565.  
  566. SET allsamp;
  567.  
  568. DROP va siga;
  569.  
  570. RUN;
  571.  
  572.  
  573.  
  574. PROC SQL;
  575.  
  576. CREATE TABLE sample AS
  577.  
  578. SELECT DISTINCT a.*, b.va, b.siga, b.absg, b.j
  579.  
  580. FROM allsamp AS a LEFT JOIN sample AS b
  581.  
  582. ON (a.co_per_rol = b.co_per_rol) AND
  583.  
  584. (a.year = b.year);
  585.  
  586. QUIT;
  587.  
  588.  
  589.  
  590. DATA sample1;
  591.  
  592. SET sample;
  593.  
  594. ext_opt = t_opt - t_debt;
  595.  
  596. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  597.  
  598. RUN;
  599.  
  600.  
  601.  
  602. %loop ;
  603.  
  604. /*
  605.  
  606. DATA sample;
  607.  
  608. SET sample;
  609.  
  610. DROP w_later;
  611.  
  612. RUN;
  613.  
  614. */
  615.  
  616. DATA new;
  617.  
  618. SET new;
  619.  
  620. KEEP w_later;
  621.  
  622. RUN;
  623.  
  624.  
  625.  
  626. DATA sample;
  627.  
  628. MERGE sample new;
  629.  
  630. RUN;
  631.  
  632.  
  633.  
  634. PROC DATASETS NOLIST;
  635.  
  636. DELETE new MYDATA2 test;
  637.  
  638. QUIT;
  639.  
  640. RUN;
  641.  
  642.  
  643.  
  644. DATA sample1;
  645.  
  646. SET sample ;
  647.  
  648. * for ceo -- see AN p.1203 ;
  649.  
  650. csho = -optosey + ex2un / (lambda * x);
  651.  
  652. x = x;
  653.  
  654. ext_opt = t_opt - t_debt;
  655.  
  656. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  657.  
  658. RUN;
  659.  
  660.  
  661.  
  662. %loop ;
  663.  
  664.  
  665.  
  666. DATA new;
  667.  
  668. SET new;
  669.  
  670. unceo_later = w_later;
  671.  
  672. DROP w_later;
  673.  
  674. RUN;
  675.  
  676.  
  677.  
  678. DATA sample;
  679.  
  680. MERGE sample new;
  681.  
  682. RUN;
  683.  
  684.  
  685.  
  686. PROC DATASETS NOLIST;
  687.  
  688. DELETE new MYDATA2 test;
  689.  
  690. QUIT;
  691.  
  692. RUN;
  693.  
  694.  
  695.  
  696. DATA sample1;
  697.  
  698. SET sample ;
  699.  
  700. * for ceo -- see AN p.1203 ;
  701.  
  702. csho = -optosey + ex2ex / (lambda * x);
  703.  
  704. x = x;
  705.  
  706. ext_opt = t_opt - t_debt;
  707.  
  708. keep va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  709.  
  710. RUN;
  711.  
  712.  
  713.  
  714. %loop;
  715.  
  716.  
  717.  
  718. DATA new;
  719.  
  720. SET new;
  721.  
  722. exceo_later = w_later;
  723.  
  724. DROP w_later;
  725.  
  726. RUN;
  727.  
  728.  
  729.  
  730. DATA sample;
  731.  
  732. MERGE sample new;
  733.  
  734. RUN;
  735.  
  736.  
  737.  
  738. PROC DATASETS NOLIST;
  739.  
  740. DELETE new MYDATA2 test;
  741.  
  742. QUIT;
  743.  
  744. RUN;
  745.  
  746.  
  747.  
  748. DATA sample;
  749.  
  750. SET sample;
  751.  
  752. dd = (LOG( va / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  753.  
  754. dd1 = dd - (siga * SQRT(t_debt));
  755.  
  756.  
  757.  
  758. eqcall = va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1) + va * (1 - exp_div);
  759.  
  760. checkmv = eqcall - w_later * optosey;
  761.  
  762.  
  763.  
  764. DATA sample;
  765.  
  766. SET sample;
  767.  
  768. siga1 = 1.01 * siga;
  769.  
  770. RUN;
  771.  
  772.  
  773.  
  774. DATA sample1;
  775.  
  776. SET sample;
  777.  
  778. siga = siga1;
  779.  
  780. ext_opt = t_opt - t_debt;
  781.  
  782. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  783.  
  784. RUN;
  785.  
  786.  
  787.  
  788. %loop ;
  789.  
  790.  
  791.  
  792. DATA new;
  793.  
  794. SET new;
  795.  
  796. w_later1 = w_later ;
  797.  
  798. DROP w_later;
  799.  
  800. RUN;
  801.  
  802.  
  803.  
  804. DATA sample;
  805.  
  806. MERGE sample new;
  807.  
  808. RUN;
  809.  
  810.  
  811.  
  812. PROC DATASETS NOLIST;
  813.  
  814. DELETE new MYDATA2 test;
  815.  
  816. QUIT;
  817.  
  818. RUN;
  819.  
  820.  
  821.  
  822. DATA sample1;
  823.  
  824. SET sample;
  825.  
  826. siga = siga1;
  827.  
  828. * for ceo AN p.1203;
  829.  
  830. x = x;
  831.  
  832. csho = -optosey + ex2ex / (lambda * x);
  833.  
  834. ext_opt = t_opt - t_debt;
  835.  
  836. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  837.  
  838. RUN;
  839.  
  840.  
  841.  
  842. %loop ;
  843.  
  844.  
  845.  
  846. DATA new;
  847.  
  848. SET new;
  849.  
  850. exceo_later1 = w_later;
  851.  
  852. DROP w_later;
  853.  
  854. RUN;
  855.  
  856.  
  857.  
  858. DATA sample;
  859.  
  860. MERGE sample new;
  861.  
  862. RUN;
  863.  
  864.  
  865.  
  866. PROC DATASETS NOLIST;
  867.  
  868. DELETE new MYDATA2 test;
  869.  
  870. QUIT;
  871.  
  872. RUN;
  873.  
  874.  
  875.  
  876. DATA sample1;
  877.  
  878. SET sample;
  879.  
  880. siga = siga1;
  881.  
  882. * for ceo AN p.1203;
  883.  
  884. x = x;
  885.  
  886. csho = -optosey + ex2un / (lambda * x);
  887.  
  888. ext_opt = t_opt - t_debt;
  889.  
  890. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  891.  
  892. RUN;
  893.  
  894.  
  895.  
  896. %loop ;
  897.  
  898.  
  899.  
  900. DATA new;
  901.  
  902. SET new;
  903.  
  904. unceo_later1 = w_later ;
  905.  
  906. DROP w_later;
  907.  
  908. RUN;
  909.  
  910.  
  911.  
  912. DATA sample;
  913.  
  914. MERGE sample new;
  915.  
  916. RUN;
  917.  
  918.  
  919.  
  920. PROC DATASETS NOLIST;
  921.  
  922. DELETE new MYDATA2 test;
  923.  
  924. QUIT;
  925.  
  926. RUN;
  927.  
  928.  
  929.  
  930. /*
  931.  
  932. solving for delta derivatives in va
  933.  
  934. */
  935.  
  936. DATA sample;
  937.  
  938. SET sample;
  939.  
  940. inc = 0.0000001;
  941.  
  942. RUN;
  943.  
  944.  
  945.  
  946. DATA sample1;
  947.  
  948. SET sample;
  949.  
  950. va = va + inc;
  951.  
  952. ext_opt = t_opt - t_debt;
  953.  
  954. KEEP va rf_net siga t_debt debt_face csho x exp_divex exp_rf exp_rfex lambda observ ext_opt t_opt t_debt;
  955.  
  956. RUN;
  957.  
  958.  
  959.  
  960. %loop ;
  961.  
  962.  
  963.  
  964. DATA new;
  965.  
  966. SET new;
  967.  
  968. w_later_up = w_later ;
  969.  
  970. DROP w_later;
  971.  
  972. RUN;
  973.  
  974.  
  975.  
  976. DATA sample;
  977.  
  978. MERGE sample new;
  979.  
  980. warr_delta = optosey * (w_later_up - w_later) / inc;
  981.  
  982.  
  983.  
  984. dd = (LOG(va / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  985.  
  986. dd1 = dd - (siga * SQRT(t_debt));
  987.  
  988.  
  989.  
  990. debt_bs = debt_face * EXP(-r_debt * t_debt) * (1 - PROBNORM(-dd + siga * SQRT(t_debt)) ) + va * exp_div * PROBNORM(-dd);
  991.  
  992. eqcall = (va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1)) + va * (1 - exp_div);
  993.  
  994.  
  995.  
  996. tva = va+inc ;
  997.  
  998. dd = (LOG(tva / debt_face) + (rf_net + 0.5 * siga**2) * t_debt) / (siga * SQRT(t_debt));
  999.  
  1000. dd1 = dd - (siga * SQRT(t_debt));
  1001.  
  1002. debt_bs_up = debt_face * EXP(-r_debt * t_debt) * (1 - PROBNORM(-dd + siga * SQRT(t_debt)) ) + tva * exp_div * PROBNORM(-dd);
  1003.  
  1004. debt_delta = (debt_bs_up - debt_bs) / inc;
  1005.  
  1006.  
  1007.  
  1008. /*
  1009.  
  1010. Estimate stk_delta using old volatility
  1011.  
  1012. */
  1013.  
  1014.  
  1015.  
  1016. stk_delta = 1 - debt_delta - warr_delta;
  1017.  
  1018.  
  1019.  
  1020. /*
  1021.  
  1022. estimate sige using new volatility
  1023.  
  1024. */
  1025.  
  1026. sige = siga * (va / mve) * stk_delta;
  1027.  
  1028.  
  1029.  
  1030. /*
  1031.  
  1032. estimate sige1 using new vola.
  1033.  
  1034. */
  1035.  
  1036. dd = (LOG( va / debt_face) + (rf_net + 0.5 * siga1**2) * t_debt) / (siga1 * SQRT(t_debt));
  1037.  
  1038. dd1 = dd - (siga1 * SQRT(t_debt));
  1039.  
  1040.  
  1041.  
  1042. eqcall1 = va * exp_div * PROBNORM(dd) - debt_face * exp_rf * PROBNORM(dd1) + va * (1 - exp_div);
  1043.  
  1044. debt_bs1 = debt_face * EXP(-r_debt * t_debt) * (1 - PROBNORM(-dd + siga1 * SQRT(t_debt)) ) + va * exp_div * PROBNORM(-dd);
  1045.  
  1046. mve1 = eqcall1 - optosey * w_later1;
  1047.  
  1048. prc1 = mve1 /csho;
  1049.  
  1050. firm_stock_sens = csho * (prc1 - prcc_f);
  1051.  
  1052. sige1 = siga1 * (va / mve1) * stk_delta;
  1053.  
  1054. firm_debt_sens = debt_bs1 - debt_bs;
  1055.  
  1056. RUN;
  1057.  
  1058.  
  1059.  
  1060. DATA sample;
  1061.  
  1062. SET sample;
  1063.  
  1064. r_ex = r_opt;
  1065.  
  1066. r_un = r_opt;
  1067.  
  1068. mat_ex = t_opt;
  1069.  
  1070. mat_un = t_opt;
  1071.  
  1072.  
  1073. mgr_stock_sens = shrown_excl_opts * (prc1 - prcc_f);
  1074.  
  1075.  
  1076.  
  1077. mgr_option_sens = (exceo_later1 - exceo_later) * opt_unex_exer_num * 1000 + (unceo_later1 - unceo_later) * opt_unex_unexer_num * 1000;
  1078.  
  1079.  
  1080.  
  1081. mgr_debt_sens = . ;
  1082.  
  1083. IF inside_debt >= 0 THEN mgr_debt_sens = (inside_debt / debt_contract) * firm_debt_sens;
  1084.  
  1085.  
  1086.  
  1087. mgr_total_sens = mgr_debt_sens + mgr_stock_sens + mgr_option_sens;
  1088.  
  1089. mgr_equity_sens = mgr_stock_sens + mgr_option_sens;
  1090.  
  1091.  
  1092.  
  1093. IF opt_unex_exer_num > 0 THEN DO;
  1094.  
  1095. dd_ex_simp = (LOG(prcc_f / ex2ex) + (r_ex -divrate_crsp + 0.5*sige**2) * mat_ex) / (sige * SQRT(mat_ex));
  1096.  
  1097. exbsval_simp = opt_unex_exer_num * (prcc_f * EXP(-1 * divrate_crsp * mat_ex) * PROBNORM(dd_ex_simp) - ex2ex * EXP(-1*r_ex*mat_ex) * PROBNORM(dd_ex_simp - sige*SQRT(mat_ex)) );
  1098.  
  1099.  
  1100.  
  1101. dd_ex_simp = (LOG(prcc_f / ex2ex) + (r_ex - divrate_crsp + 0.5 * sige1**2) * mat_ex) / (sige1 * SQRT(mat_ex));
  1102.  
  1103. exbsval_simp1 = opt_unex_exer_num * (prcc_f * EXP(-1 * divrate_crsp * mat_ex) * PROBNORM(dd_ex_simp) - ex2ex * EXP(-1 * r_ex * mat_ex) * PROBNORM(dd_ex_simp - sige1 * SQRT(mat_ex)));
  1104.  
  1105. END;
  1106.  
  1107. ELSE IF opt_unex_exer_num = 0 THEN DO;
  1108.  
  1109. exbsval_simp = 0;
  1110.  
  1111. exbsval_simp1 = 0;
  1112.  
  1113. END;
  1114.  
  1115.  
  1116.  
  1117. IF opt_unex_unexer_num > 0 THEN DO;
  1118.  
  1119. dd_un_simp = (LOG(prcc_f / ex2un) + (r_un - divrate_crsp + 0.5 * sige**2) * mat_un) / (sige * SQRT(mat_un));
  1120.  
  1121. unbsval_simp = opt_unex_unexer_num * (prcc_f * EXP(-1 * divrate_crsp * mat_un) * PROBNORM(dd_un_simp) - ex2un * EXP(-1 * r_un * mat_un) * PROBNORM(dd_un_simp - sige*SQRT(mat_un)) );
  1122.  
  1123.  
  1124.  
  1125. dd_un_simp = (LOG(prcc_f / ex2un) + (r_un - divrate_crsp + 0.5 * sige1**2) * mat_un) / (sige1 * SQRT(mat_un));
  1126.  
  1127. unbsval_simp1 = opt_unex_unexer_num * (prcc_f * EXP(-1 * divrate_crsp * mat_un) * PROBNORM(dd_un_simp) - ex2un * EXP(-1 * r_un*mat_un) * PROBNORM(dd_un_simp - sige1*SQRT(mat_un)) );
  1128.  
  1129. END;
  1130.  
  1131. ELSE IF opt_unex_unexer_num = 0 THEN DO;
  1132.  
  1133. unbsval_simp = 0;
  1134.  
  1135. unbsval_simp1 = 0;
  1136.  
  1137. END;
  1138.  
  1139. ELSE IF optosey = 0 THEN DO;
  1140.  
  1141. unbsval_simp = 0;
  1142.  
  1143. END;
  1144.  
  1145.  
  1146.  
  1147. totvega = ((exbsval_simp1 - exbsval_simp) + (unbsval_simp1 - unbsval_simp)) * 1000;
  1148.  
  1149. IF ceo_opt = 0 THEN DO;
  1150.  
  1151. mgr_option_sens = 0;
  1152.  
  1153. totvega = 0;
  1154.  
  1155. END;
  1156.  
  1157. mgr_total_sens = mgr_debt_sens + mgr_stock_sens + mgr_option_sens;
  1158.  
  1159. mgr_equity_sens = mgr_stock_sens + mgr_option_sens;
  1160.  
  1161. RUN;
  1162.  
  1163.  
  1164.  
  1165. %IF &i=1 %THEN %DO;
  1166.  
  1167. DATA finsamp;
  1168.  
  1169. SET sample;
  1170.  
  1171. RUN;
  1172.  
  1173. %END;
  1174.  
  1175.  
  1176.  
  1177. %IF &i>1 %THEN %DO;
  1178.  
  1179. DATA finsamp;
  1180.  
  1181. SET finsamp sample;
  1182.  
  1183. RUN;
  1184.  
  1185. %END;
  1186.  
  1187.  
  1188.  
  1189. %END;
  1190.  
  1191.  
  1192.  
  1193. %mend bigloop ;
  1194.  
  1195.  
  1196.  
  1197. OPTIONS NONOTES;
  1198.  
  1199.  
  1200.  
  1201. %bigloop;
  1202.  
  1203.  
  1204.  
  1205. OPTIONS NOTES;
  1206.  
  1207.  
  1208.  
  1209. PROC MEANS DATA = finsamp;
  1210.  
  1211. RUN;
  1212.  
  1213.  
  1214.  
  1215. PROC MEANS DATA = equal;
  1216.  
  1217. RUN;
  1218.  
  1219.  
  1220.  
  1221. PROC SQL;
  1222.  
  1223. CREATE TABLE finsamp AS
  1224.  
  1225. SELECT DISTINCT a.*, b.war_val_eq
  1226.  
  1227. FROM finsamp AS a LEFT JOIN equal AS b
  1228.  
  1229. ON a.co_per_rol = b.co_per_rol and a.year = b.year;
  1230.  
  1231. QUIT;
  1232.  
  1233.  
  1234.  
  1235. PROC SORT DATA = finsamp;
  1236.  
  1237. BY co_per_rol year;
  1238.  
  1239. RUN;
  1240.  
  1241.  
  1242.  
  1243. PROC MEANS DATA = finsamp;
  1244.  
  1245. VAR co_per_rol year mgr_option_sens va siga war_val_eq exbsval_simp totvega stk_delta debt_delta warr_delta sige1 sige siga1 siga siga_eq;
  1246.  
  1247. RUN;
  1248.  
  1249.  
  1250.  
  1251. DATA &output_ds;
  1252.  
  1253. SET finsamp;
  1254.  
  1255. RUN;
  1256.  
  1257.  
  1258.  
  1259. %winsor(dsetin=finsamp, dsetout=finsamp, vars=mgr_debt_sens mgr_stock_sens mgr_option_sens mgr_equity_sens mgr_total_sens, type=winsor, pctl=1 99);
  1260.  
  1261.  
  1262.  
  1263. PROC MEANS DATA=finsamp;
  1264.  
  1265. VAR mgr_debt_sens mgr_stock_sens mgr_option_sens mgr_equity_sens mgr_total_sens;
  1266.  
  1267. RUN;
  1268.  
  1269.  
  1270.  
  1271. PROC MEANS DATA=finsamp (WHERE=(mgr_total_sens ^= .));
  1272.  
  1273. VAR mgr_debt_sens mgr_stock_sens mgr_option_sens mgr_equity_sens mgr_total_sens;
  1274.  
  1275. RUN;
Add Comment
Please, Sign In to add comment