/* Granger Causality Test For Pooled Models */ %let p=6 ; /* Number of Lags */ %let xvar=XXXX ; /* X variable */ %let yvar=YYYY ; /* Y variable */ %let mydatevar=Date ; /* Date Time Variable */ %let mygeo=_geocode ; /* Cross Sectional variable from pooled structure */ %let mydata=testme; data TESTME; input Date _Geocode $ YYYY XXXX; cards; 2001.3 AK 50.09325334 182341271 2001.4 AK 49.56427918 193858751 2002.1 AK 47.96972013 252930364 2002.2 AK 48.27256352 259933236 2002.3 AK 47.9876475 260391569 2002.4 AK 46.63006885 269793122 2003.1 AK 49.10161939 270472058 2003.2 AK 48.14979845 281454748 2003.3 AK 49.18590326 285458475 2003.4 AK 50.2279529 285146477 2004.1 AK 48.37198984 299360785 2004.2 AK 50.30122101 299541591 2004.3 AK 50.97692997 316826521 2004.4 AK 52.82040718 316928998 2005.1 AK 58.72145549 316592157 2005.2 AK 62.13414552 314822662 2005.3 AK 65.20070053 324339135 2005.4 AK 73.03698182 324666406 2006.1 AK 77.17355886 325474518 2006.2 AK 79.60707452 285071632 2006.3 AK 80.50160034 297513692 2006.4 AK 78.43378502 298449932 2007.1 AK 74.70538617 298956884 2007.2 AK 71.03104788 300861972 2007.3 AK 68.57872087 295458933 2007.4 AK 68.67583935 301811434 2008.1 AK 69.7353249 303376375 2008.2 AK 70.88001303 306169147 2008.3 AK 73.87626171 312472989 2008.4 AK 65.74611629 309228467 2009.1 AK 66.97910581 302283840 2009.2 AK 64.62275357 305251718 2009.3 AK 64.29682858 305288501 2009.4 AK 64.13395141 310362395 2010.1 AK 65.55675579 310729720 2010.2 AK 67.30791468 302203244 2010.3 AK 68.00282159 293597978 2010.4 AK 67.96478834 309876800 2011.1 AK 68.42516858 311834720 2011.2 AK 69.11401085 322549763 2011.3 AK 69.67939035 311265933 2001.3 FL 211.8460842 6044748534 2001.4 FL 216.0352213 6157867186 2002.1 FL 214.5424988 6535800159 2002.2 FL 205.8480251 6594695841 2002.3 FL 216.607646 6609789164 2002.4 FL 238.9658302 6660098865 2003.1 FL 209.8067476 6579505480 2003.2 FL 225.7600022 6488370106 2003.3 FL 232.8103391 6643635113 2003.4 FL 229.5164991 6726122477 2004.1 FL 223.7284911 6404710173 2004.2 FL 223.2408517 6999945595 2004.3 FL 239.8268525 7132440009 2004.4 FL 233.0269808 7117070795 2005.1 FL 268.6823472 7163144969 2005.2 FL 297.1841 7312305604 2005.3 FL 312.7557059 8191171331 2005.4 FL 337.385502 7709293855 2006.1 FL 364.0044691 7849382131 2006.2 FL 387.5523594 7540962249 2006.3 FL 382.0195193 7642250857 2006.4 FL 378.6157863 7594688023 2007.1 FL 358.1171809 7827382009 2007.2 FL 349.9926349 7890470437 2007.3 FL 293.6655599 7786826124 2007.4 FL 330.533036 7865848171 2008.1 FL 317.9486209 7786559727 2008.2 FL 316.1481094 7731771411 2008.3 FL 307.4190614 7852707618 2008.4 FL 294.7454991 7742857028 2009.1 FL 283.6746244 7586763428 2009.2 FL 278.7643324 7465795888 2009.3 FL 287.6506612 7523875420 2009.4 FL 281.6205674 7383836440 2010.1 FL 279.4016867 7281567054 2010.2 FL 289.4210269 6980977780 2010.3 FL 291.4306103 6861537408 2010.4 FL 298.4198114 7119724928 2011.1 FL 297.8633487 6970379102 2011.2 FL 305.0859037 7014111921 2011.3 FL 307.527312 6885671456 2001.3 GA 108.0957038 2843914417 2001.4 GA 111.1247888 2868374597 2002.1 GA 110.5516479 3031265955 2002.2 GA 121.1938872 3030671671 2002.3 GA 100.1433225 2972130522 2002.4 GA 113.1071424 3013074198 2003.1 GA 117.2539089 3005102075 2003.2 GA 118.4696386 2968854953 2003.3 GA 104.5180208 3007957561 2003.4 GA 112.6784157 3032688793 2004.1 GA 113.1585156 2815553704 2004.2 GA 115.9555775 3089825692 2004.3 GA 114.3586227 3142833204 2004.4 GA 117.3712523 3119860073 2005.1 GA 128.7419015 3092860978 2005.2 GA 128.7534777 3200081226 2005.3 GA 143.0709187 3329312056 2005.4 GA 145.9643703 3370945069 2006.1 GA 150.2745156 3411059212 2006.2 GA 147.1657284 3313125567 2006.3 GA 190.2812611 3339789375 2006.4 GA 144.4958633 3326456444 2007.1 GA 144.541939 3385415649 2007.2 GA 142.2673546 3463690029 2007.3 GA 131.044513 3457987696 2007.4 GA 132.2238998 3508901953 2008.1 GA 144.0502167 3455826717 2008.2 GA 137.3047553 3437074023 2008.3 GA 140.5231916 3546491274 2008.4 GA 146.7881425 3456713993 2009.1 GA 132.2299237 3381000908 2009.2 GA 132.8442591 3330564602 2009.3 GA 128.8337402 3281052091 2009.4 GA 127.3905324 3198123916 2010.1 GA 126.7069957 3129188392 2010.2 GA 132.9335423 3073262470 2010.3 GA 140.4225592 3014674504 2010.4 GA 133.5710126 3137446187 2011.1 GA 134.6475668 3066398279 2011.2 GA 139.3607607 3108527031 2011.3 GA 142.1481805 3066180423 ; run; ods pdf file='c:\granger.pdf'; %macro granger; OPTIONS NOTES SOURCE SOURCE2 MPRINT MLOGIC MERROR SYMBOLGEN ; data TEST; set &mydata; run; proc sort ;by &mygeo &mydatevar ;run; /* removing data due to lag generation later */ data remove (keep=&mydatevar); set test; run; proc sort nodupkey ;by &mydatevar; run; data remove; set remove; Flag=1; if _n_>&p then delete; run; data test; set test; %do i=1 %to &p; &yvar&i=lag&i(&yvar); &xvar&i=lag&i(&xvar); %end; run; proc sort data=test;by date;run; data test; merge test(in=a) remove; by &mydatevar; if a; if flag=1 then delete; run; proc sort data=test;by &mygeo &mydatevar;run; * unrestricted model; proc autoreg data=test; model &yvar = &yvar.1-&yvar&p &xvar.1-&xvar&p; output out=out1 r=e1; /* output residuals */ run; * restricted model; proc autoreg data=out1; model &yvar = &yvar.1-&yvar&p; output out=out2 r=e0; /* output residuals */ run; data mydata; set out2; P=&p; T=_N_; SE0=E0*E0; SE1=E1*E1; Retain SSE0 SSE1; if _N_=1 then SSE0=0; if _N_=1 then SSE1=0; SSE0=SSE0+SE0; SSE1=SSE1+SE1; call symput ('SSE0',SSE0); call symput ('SSE1',SSE1); call symput ('T',T); run; data mydata2; set mydata; TEST1 = ((sse0 - sse1)/p)/(sse1/(T - 2*p - 1)); P_VAL1 = 1 - probf(test1,p,T - 2*p - 1); * asymtotically equivalent test; TEST2 = (T * (sse0 - sse1))/sse1; P_VAL2 = 1 - probchi(test2,p); Run; data GRANGERRESULTS(keep=P T SSE0 SSE1 TEST1 TEST2 P_VAL1 P_VAL2); set mydata2; label P='Max # Lags' T='Observations' SSE0='Sum of Squared Errors - Restricted' SSE1='Sum of Squared Errors - Unrestricted' TEST1='Granger F-Test Statistic' TEST2='Granger Asymptotic Equivalency Test Statistic' P_VAL1='Granger F-Test Probability' P_VAL2='Granger Asymptotic Equivalency Test Probability' ; if _n_^=&T then delete; run; proc transpose data=GRANGERRESULTS out=GRANGERRESULTS;run; proc print; format COL1 best12.; run; ods pdf close; %mend granger; %granger;