options ls=69; DATA quarter; DO year=97 TO 99; DO j=1 TO 12; IF j=1 THEN xx='1dec1997'd; QUARTER=QTR( intnx('month',xx,J) ); DO n=1 to 100; sales= int( normal(123)*(20) + (quarter*7) ); IF QUARTER=3 THEN SALES=SALES-15; OUTPUT; END; END; END; RUN; PROC FORMAT ; VALUE PCTA .='(na)' OTHER=[PERCENT7.0]; VALUE DOLLARA OTHER=[DOLLAR6.0] .='(na)' ; RUN; PROC REPORT DATA=QUARTER NOWD OUT=One SPLIT="*" headline; TITLE1 'TABLE 1: FINAL TABLE '; COLUMN ( year quarter ) ("_SALES_" sales pct ) ("_QUARTER CHANGE_" diff diff_pct ) ("_YEAR-TO-DATE_" ytd cumpct ); DEFINE year /GROUP FORMAT=5. 'YEAR*(1)'; DEFINE quarter /GROUP FORMAT=4. 'QTR*(2)' ; DEFINE sales /COMPUTED FORMAT=DOLLAR7. SUM 'Total*(3)'; DEFINE PCT /COMPUTED FORMAT=PERCENT7.0 'Percent*(4)'; DEFINE diff /COMPUTED FORMAT= DOLLAR7.0 "TOTAL*(5)" ; DEFINE diff_pct/COMPUTED FORMAT=PERCENT8.0 'PERCENT*(6)'; DEFINE ytd /COMPUTED FORMAT=DOLLAR8. 'YTD*(7)' ; DEFINE cumpct /COMPUTED FORMAT=PERCENT8.0 'PERCENT*(8)'; COMPUTE BEFORE year; r=0; last=0; total=sales.SUM; cumtot=0; ENDCOMP; COMPUTE diff; r+1; IF r=1 THEN diff=. ; IF r>1 THEN DO; last=sales.SUM; if _BREAK_ EQ " " THEN diff = sales.SUM-py; if _BREAK_ EQ " " THEN last = sales.SUM ; if _BREAK_ NE " " THEN diff = . ; END; py = sales.SUM; ENDCOMP; COMPUTE diff_pct; diff_pct = (diff / (last - diff) ); ENDCOMP; BREAK AFTER year / SUMMARIZE SKIP OL UL ; COMPUTE ytd ; cumtot+sales.SUM; ytd=cumtot; IF _BREAK_="year" THEN ytd =.; if _BREAK_="year" THEN total=0; ENDCOMP; COMPUTE cumpct; cumpct=ytd/total; ENDCOMP; COMPUTE pct; pct=sales.SUM/total ; ENDCOMP; BREAK AFTER year / SUMMARIZE OL UL ; RUN; proc print ;run; PROC REPORT DATA=QUARTER CENTER nowd SPLIT="*" OUT=TWO; WHERE(year=98); TITLE1 "TABLE 2: 1998 SALES BY QUARTER"; COLUMN quarter ('_SALES_' sales sales=pct ) ; DEFINE quarter / GROUP FORMAT=8. 'QUARTER*(1)' CENTER; DEFINE sales / ANALYSIS SUM FORMAT=DOLLAR8. 'TOTAL*(2)'; DEFINE pct / ANALYSIS PCTSUM FORMAT=PERCENT8.0 'PERCENT*(3)'; RBREAK AFTER /SUMMARIZE UL OL; RUN; proc print ;run; PROC REPORT DATA=QUARTER nowd CENTER SPLIT="*" out=Three; WHERE(year=98); TITLE1 "TABLE 3: 1998 SALES BY QUARTER and YEAR TO DATE"; COLUMN quarter ('_SALES_' ("_BY QUARTER_" sales sales=pct) ('_YEAR TO DATE_' ytd cumpct ) ) ; DEFINE quarter / GROUP FORMAT=8. 'QUARTER*(1)' CENTER; DEFINE sales / ANALYSIS FORMAT=DOLLAR8. SUM 'Total*(2)'; DEFINE pct / ANALYSIS PCTSUM FORMAT=PERCENT8.0 'Percent*(3)'; DEFINE ytd / COMPUTED "TOTAL*(4)" FORMAT= DOLLAR8.0 ; DEFINE cumpct / COMPUTED 'PERCENT*(5)' FORMAT=percent9.0; COMPUTE BEFORE; total+sales.SUM; cumtot=0; ENDCOMP; COMPUTE ytd ; cumtot+sales.SUM; ytd=cumtot; IF _BREAK_="_RBREAK_" THEN ytd=.; ENDCOMP; COMPUTE cumpct; cumpct=ytd/total; ENDCOMP; RBREAK AFTER /SUMMARIZE UL OL; RUN; proc print ;run; PROC REPORT DATA=QUARTER nowd CENTER SPLIT="*" out=Four; TITLE1 'TABLE 4: SALES BY QUARTER and YEAR TO DATE'; COLUMN year quarter ('_SALES_' ('_BY QUARTER_' sales pct) ("_YEAR TO DATE_" ytd cumpct)); DEFINE year / GROUP FORMAT=5. 'YEAR*' '*(1)*' CENTER; DEFINE quarter / GROUP FORMAT=8. 'QUARTER*' '*(2)*' CENTER; DEFINE sales / ANALYSIS FORMAT=DOLLAR8. SUM 'TOTAL*(3)'; DEFINE pct / COMPUTED FORMAT=PERCENT8.0 'PERCENT*(4)'; DEFINE ytd / COMPUTED "TOTAL*(5)" FORMAT= DOLLAR8.0 ; DEFINE cumpct / COMPUTED FORMAT=percent9.0 'PERCENT*(6)'; COMPUTE BEFORE year; total+sales.SUM; cumtot=0; ENDCOMP; COMPUTE ytd ; cumtot+sales.SUM; ytd=cumtot; IF _BREAK_="year" THEN ytd=.; if _break_="year" THEN total=0; ENDCOMP; COMPUTE cumpct; cumpct=ytd/total; ENDCOMP; COMPUTE pct; pct=sales.SUM/total ; ENDCOMP; BREAK AFTER year / SUMMARIZE SKIP UL OL ; RUN; proc print ;run; PROC REPORT DATA=QUARTER NOWD OUT=Five SPLIT="*" CENTER HEADSKIP HEADLINE; TITLE1 "TABLE 5: Simple Difference Table"; WHERE(YEAR=98); COLUMN ("_QUARTER_" quarter ) ("_SALES_" sales sales=pct ) ("_QUARTER CHANGE_" diff diff_pct) ; DEFINE quarter / GROUP FORMAT=12. '(1)' CENTER; DEFINE sales / ANALYSIS FORMAT=DOLLAR8. SUM 'TOTAL*(2)'; DEFINE pct / ANALYSIS PCTSUM FORMAT=PERCENT8.0 'PERCENT*(3)'; DEFINE diff / COMPUTED FORMAT= DOLLAR8.0 "CHANGE*(4)" ; DEFINE diff_pct / COMPUTED FORMAT=percent9.0 'PERCENT*(5)' ; COMPUTE diff; r+1; IF r=1 THEN diff=. ; IF r>1 THEN DO; last=sales.SUM; if _BREAK_ EQ " " THEN DO; diff=sales.SUM-py; last=sales.SUM ; END; if _BREAK_ NE " " THEN diff = . ; END; py=sales.SUM; ENDCOMP; COMPUTE diff_pct; diff_pct = (diff / (last - diff) ); ENDCOMP; RBREAK AFTER / SUMMARIZE SKIP OL UL ; RUN; proc print ;run; PROC REPORT DATA=QUARTER NOWD OUT=Six SPLIT="*" CENTER HEADSKIP HEADLINE; TITLE1 "TABLE 6: Two Level Difference Table"; COLUMN ( year quarter ) ("_SALES_" sales sales=pct) ("_QUARTER CHANGE_" diff diff_pct) ; DEFINE YEAR / GROUP; DEFINE quarter / GROUP FORMAT=8. 'QUARTER*(1)' CENTER; DEFINE sales / COMPUTED FORMAT=DOLLAR8. SUM 'Total*(2)'; DEFINE pct / ANALYSIS PCTSUM FORMAT=PERCENT8.0 'Percent*(3)'; DEFINE diff / COMPUTED "TOTAL*(4)" FORMAT= DOLLAR8.0 ; DEFINE diff_pct / COMPUTED 'PERCENT*(5)' FORMAT=percent9.0; COMPUTE BEFORE year; r=0; last=0; total=sales.SUM; ENDCOMP; COMPUTE pct; pct=sales.SUM/total; ENDCOMP; COMPUTE diff; r+1; IF r=1 THEN diff=. ; IF r>1 THEN DO; last=sales.SUM; if _BREAK_ EQ " " THEN diff=sales.SUM-PY; if _BREAK_ EQ " " THEN last=sales.SUM ; if _BREAK_ NE " " THEN diff = . ; END; py=sales.SUM; ENDCOMP; COMPUTE diff_pct; diff_pct= (diff/(last-diff) ); ENDCOMP; BREAK AFTER year / SUMMARIZE SKIP OL UL ; RUN; proc print ;run;