I have attached an old data file I use for my regression and will paste my entire code below. What I'd like to do is to take the natural log of the daily change for every month but have the proc statement ignore months that do not come through in the data set. %let lastdat=; /*Macro that automatically pulls in most recent data*/ proc sql noprint; select memname into :lastdat from dictionary.tables where upcase(libname) = 'PROD_STG' and upcase(memname) like 'PRICES_TRANSPOSE_%' order by input(scan(memname,-1,'_'),date.) desc; quit; /*taking the natural log of the daily change for each commodity month*/ data work.danreg; set prod_stg.&lastdat; cornY0M10 = CYELLOW_00998_Y0_M10 / lag(CYELLOW_00998_Y0_M10); lncornY0M10 = log(cornY0M10); cornY0M11 = CYELLOW_00998_Y0_M11 / lag(CYELLOW_00998_Y0_M11); lncornY0M11 = log(cornY0M11); cornY0M12 = CYELLOW_00998_Y0_M12 / lag(CYELLOW_00998_Y0_M12); lncornY0M12 = log(cornY0M12); cornY1M01 = CYELLOW_00998_Y1_M01 / lag(CYELLOW_00998_Y1_M01); lncornY1M01 = log(cornY1M01); cornY1M02= CYELLOW_00998_Y1_M02 / lag(CYELLOW_00998_Y1_M02); lncornY1M02 = log(cornY1M02); cornY1M03 = CYELLOW_00998_Y1_M03 / lag(CYELLOW_00998_Y1_M03); lncornY1M03 = log(cornY1M03); cornY1M04 = CYELLOW_00998_Y1_M04 / lag(CYELLOW_00998_Y1_M04); lncornY1M04 = log(cornY1M04); cornY1M05 = CYELLOW_00998_Y1_M05 / lag(CYELLOW_00998_Y1_M05); lncornY1M05 = log(cornY1M05); cornY1M06 = CYELLOW_00998_Y1_M06 / lag(CYELLOW_00998_Y1_M06); lncornY1M06 = log(cornY1M06); cornY1M07 = CYELLOW_00998_Y1_M07 / lag(CYELLOW_00998_Y1_M07); lncornY1M07 = log(cornY1M07); cornY1M08 = CYELLOW_00998_Y1_M08 / lag(CYELLOW_00998_Y1_M08); lncornY1M08 = log(cornY1M08); cornY1M09 = CYELLOW_00998_Y1_M09 / lag(CYELLOW_00998_Y1_M09); lncornY1M09 = log(cornY1M09); cornY1M10 = CYELLOW_00998_Y1_M10 / lag(CYELLOW_00998_Y1_M10); lncornY1M10 = log(cornY1M10); cornY1M11 = CYELLOW_00998_Y1_M11 / lag(CYELLOW_00998_Y1_M11); lncornY1M11 = log(cornY1M11); cornY1M12 = CYELLOW_00998_Y1_M12 / lag(CYELLOW_00998_Y1_M12); lncornY1M12 = log(cornY1M12); cornY2M01 = CYELLOW_00998_Y2_M01 / lag(CYELLOW_00998_Y2_M01); lncornY2M01 = log(cornY2M01); cornY2M03 = CYELLOW_00998_Y2_M03 / lag(CYELLOW_00998_Y2_M03); lncornY2M03 = log(cornY2M03); cornY2M04 = CYELLOW_00998_Y2_M04 / lag(CYELLOW_00998_Y2_M04); lncornY2M04 = log(cornY2M04); cornY2M05 = CYELLOW_00998_Y2_M05 / lag(CYELLOW_00998_Y2_M05); lncornY2M05 = log(cornY2M05); cornY2M06 = CYELLOW_00998_Y2_M06 / lag(CYELLOW_00998_Y2_M06); lncornY2M06 = log(cornY2M06); cornY2M07 = CYELLOW_00998_Y2_M07 / lag(CYELLOW_00998_Y2_M07); lncornY2M07 = log(cornY2M07); cornY2M08 = CYELLOW_00998_Y2_M08 / lag(CYELLOW_00998_Y2_M08); lncornY2M08 = log(cornY2M08); cornY2M10 = CYELLOW_00998_Y2_M10 / lag(CYELLOW_00998_Y2_M10); lncornY2M10 = log(cornY2M10); run; /*taking numerous single linear regressions of the front month against each subsequent month*/ proc reg data=work.danreg outest=work.regoutput edf; '11/15/14'n:model lncornY0M10 = lncornY0M11/noprint; '12/15/14'n:model lncornY0M10 = lncornY0M12/noprint; '01/15/15'n:model lncornY0M10 = lncornY1M01/noprint; '02/15/15'n:model lncornY0M10 = lncornY1M02/noprint; '03/15/15'n:model lncornY0M10 = lncornY1M03/noprint; '04/15/15'n:model lncornY0M10 = lncornY1M04/noprint; '05/15/15'n:model lncornY0M10 = lncornY1M05/noprint; '06/15/15'n:model lncornY0M10 = lncornY1M06/noprint; '07/15/15'n:model lncornY0M10 = lncornY1M07/noprint; '08/15/15'n:model lncornY0M10 = lncornY1M08/noprint; '09/15/15'n:model lncornY0M10 = lncornY1M09/noprint; '10/15/15'n:model lncornY0M10 = lncornY1M10/noprint; '11/15/15'n:model lncornY0M10 = lncornY1M11/noprint; '12/15/15'n:model lncornY0M10 = lncornY1M12/noprint; '01/15/15'n:model lncornY0M10 = lncornY2M01/noprint; '03/15/15'n:model lncornY0M10 = lncornY2M03/noprint; '04/15/15'n:model lncornY0M10 = lncornY2M04/noprint; '05/15/15'n:model lncornY0M10 = lncornY2M05/noprint; '06/15/15'n:model lncornY0M10 = lncornY2M06/noprint; '07/15/15'n:model lncornY0M10 = lncornY2M07/noprint; /*'08/15/15'n:model lncornY0M10 = lncornY2M08/noprint; this is inactive since it stops the proc step*/ '10/15/15'n:model lncornY0M10 = lncornY2M10/noprint; run; data want; set work.regoutput; coefficient=coalesce(of lncornY0M11, lncornY0M12, lncornY1M01, lncornY1M02, lncornY1M03, lncornY1M04, lncornY1M05, lncornY1M06, lncornY1M07, lncornY1M08, lncornY1M09, lncornY1M10, lncornY1M11, lncornY1M12, lncornY2M01, lncornY2M03, lncornY2M04, lncornY2M05, lncornY2M06, lncornY2M07, lncornY2M08, lncornY2M10); drop lncornY0M11 lncornY0M12 lncornY1M01 lncornY1M02 lncornY1M03 lncornY1M04 lncornY1M05 lncornY1M06 lncornY1M07 lncornY1M08 lncornY1M09 lncornY1M10 lncornY1M11 lncornY1M12 lncornY2M01 lncornY2M03 lncornY2M04 lncornY2M05 lncornY2M06 lncornY2M07 lncornY2M08 lncornY2M10; run; proc print; VAR _MODEL_ Intercept _RSQ_ coefficient; Run;
... View more