Creating an Output Data Set

/*--------------------------------------------------------------

                    SAS Sample Library

        Name: ctaex05.sas
 Description: Example program from SAS/ETS User's Guide,
              The COMPUTAB Procedure
       Title: Creating an Output Data Set
     Product: SAS/ETS Software
        Keys: programmable tabular reports
        PROC: COMPUTAB
       Notes:

--------------------------------------------------------------*/


title 'Creating an Output Data Set in PROC COMPUTAB';

data product;
   input pcode div region month sold revenue recd cost;
datalines;
1 1 1 1 56 5600 29 2465
1 1 1 2 13 1300 30 2550
1 1 1 3 17 1700 65 5525
2 1 1 1  2  240 50 4900
2 1 1 2 82 9840 17 1666
1      1       1       1      37      3700     75    6375
2      1       1       1      84     10080     28    2744
3      1       1       1      19      2470     73    7884
1      1       1       2       8       800     74    6290
2      1       1       2      71      8520     77    7546
3      1       1       2      49      6370     19    2052
1      1       1       3      16      1600     40    3400
2      1       1       3      46      5520     86    8428
3      1       1       3      40      5200     19    2052
1      1       1       4      17      1700     24    2040
2      1       1       4      29      3480     57    5586
3      1       1       4      36      4680     81    8748
1      1       1       5      62      6200     37    3145
2      1       1       5      21      2520      6     588
3      1       1       5      97     12610     24    2592
1      1       1       6      63      6300      3     255
2      1       1       6      84     10080     99    9702
3      1       1       6      36      4680     22    2376
1      1       1       7      42      4200     14    1190
2      1       1       7      75      9000      6     588
3      1       1        7     77     10010     79    8532
1      1       1        8     56      5600     16    1360
2      1       1        8     32      3840     64    6272
3      1       1        8     65      8450     84    9072
1      1       1        9     22      2200     92    7820
2      1       1        9      3       360     87    8526
3      1       1        9     49      6370     56    6048
1      1       1       10     30      3000     49    4165
2      1       1       10     37      4440     47    4606
3      1       1       10     49      6370     44    4752
1      1       1       11     81      8100     85    7225
2      1       1       11     39      4680     61    5978
3      1       1       11      7       910     79    8532
1      1       1       12     95      9500     74    6290
2      1       1       12     91     10920     50    4900
3      1       1       12     65      8450     41    4428
1      1       2        1     64      6400     60    5100
2      1       2        1     61      7320     67    6566
3      1       2        1     70      9100     65    7020
1      1       2        2     86      8600     50    4250
2      1       2       2      59      7080     51    4998
3      1       2       2      83     10790      6     648
1      1       2       3      74      7400     52    4420
2      1       2       3      27      3240     99    9702
3      1       2       3      77     10010     16    1728
1      1       2       4      22      2200     60    5100
2      1       2       4      70      8400     32    3136
3      1       2       4       5       650     91    9828
1      1       2       5      85      8500     84    7140
2      1       2       5      11      1320     38    3724
3      1       2       5      18      2340     43    4644
1      1       2       6      46      4600     84    7140
2      1       2       6      88     10560     57    5586
3      1       2       6       5       650     47    5076
1      1       2       7      30      3000     22    1870
2      1       2       7      72      8640     79    7742
3      1       2       7      59      7670     52    5616
1      1       2       8      36      3600     41    3485
2      1       2       8      94     11280     34    3332
3      1       2       8      36      4680      2     216
1      1       2        9      55     5500     72     6120
2      1       2        9      84    10080     14     1372
3      1       2        9      43     5590     99    10692
1      1       2       10      64     6400     91     7735
2      1       2       10      46     5520     64     6272
3      1       2       10      32     4160     78     8424
1      1       2       11      55     5500     95     8075
2      1       2       11       6      720     70     6860
3      1       2       11       6      780     15     1620
1      1       2       12      86     8600     50     4250
2      1       2       12      89    10680     73     7154
3      1       2       12      69     8970     35     3780
;

proc sort data=product out=sorted;
   by div region;
run;

/* create data set, profit */
proc computab data=sorted notrans out=profit noprint;
   by div region;
   sumby div;

   /* specify order of rows and row titles */
   row     jan feb mar qtr1;
   row     apr may jun qtr2;
   row     jul aug sep qtr3;
   row     oct nov dec qtr4;

   /* specify order of columns and column titles */
   columns sold revenue recd cost profit pctmarg;

   /* select row for appropriate month */
   _row_ = month + ceil( month / 3 ) - 1;

   /* calculate quarterly summary rows */
   rowcalc:
      qtr1 = jan + feb + mar;
      qtr2 = apr + may + jun;
      qtr3 = jul + aug + sep;
      qtr4 = oct + nov + dec;

   /* calculate profit columns */
   colcalc:
      profit = revenue - cost;
      if cost > 0 then pctmarg = profit / cost * 100;
run;

/* make a partial listing of the output data set */
options linesize=96;
proc print data=profit(obs=10) noobs;
run;