Your second question first. You asked: " Also please let me how I can suppress message 'THE SAS SYSTEM' messages."
This is the standard SAS System Title. If you investigate the use of the TITLE statement, you can blank out the default title using the first example or you can reset the title using the second example.
** 1) Blank out Title;
** 2) Reset Title to Other String;
title1 'This is My New Title';
Your first question is a bit more difficult to answer. Normally, the reporting procedures, such as PROC PRINT, PROC REPORT and PROC TABULATE operate on your variables in pre-determined manner. Your data seems "long and skinny" I suspect it looks like this when you do a simple PROC PRINT:
This shows that you have one variable or column called DZONE and another variable or column called TPORT and you have multiple rows or observations. PROC PRINT will show you every single row (with or without OBServation numbers at the far left).
PROC REPORT, as you discovered, adds a little cosmetic flourish by showing only the first DZONE in an ordered group because you have defined a usage of ORDER for the DZONE variable. If you were to leave DZONE as an ORDER variable, but define TPORT as an ACROSS variable, then PROC REPORT would want to COUNT the unique values of TPORT (how many 1552, how many 1553), etc, which is not what you want. PROC TABULATE would want to do the same thing.
Also, you haven't really described what your final result is -- is it a report or an output dataset??? If all you want is a report, then you might need to consider a procedure other than PROC REPORT. I assume that something like this is NOT what you want:
DROP-ZONE 1552 1553 1554 1555 1556 1602 1603 1604 1605 1606
DZAC 1 1 . . . 1 1 1 . .
DZAG . . 1 1 1 . . . 1 1
But instead you want something more like this. Note that instead of 1 variable called TPORT, there are multiple numbered variables called TPORT1-TPORT5:
DZONE tport1 tport2 tport3 tport4 tport5
DZAC 1552 1553 1602 1603 1604
DZAG 1554 1555 1556 1605 1606
The first example above would be created with PROC REPORT; the second example would be created by turning the data from "long and skinny" data into "wide" data by using PROC TRANSPOSE and then using a simple PROC PRINT on the transposed data.
You might want a report that shows just 1 big character variable that was the concatenation of all your unique values for the TPORT variable and this is possible, but it is a more complicated DATA step or SQL program.
Useful information to know would be:
1) what operating system you are using
2) what your ultimate use of the output file/report file is -- you want to print, you are FTPing the file to another platform, or ???
3) what you really want -- a report with TITLES or a dataset without TITLES
---3a) if you want a report -- what are you going to do with the report -- print it, put it into Word, put it on a web site, email to people, open with Excel
---3b) if you want a dataset -- what is the final disposition of the dataset and what is the final structure of the output dataset
If all you need is a report, then the simplest method would be to use the PROC TRANSPOSE/PROC PRINT method. If you need an output dataset in a different structure than the input dataset, then you will have to look to other techniques.
In mine sense, Cynthia has the ability to offer you some example code,
but do not know why she not do it.
the following is reference example.
If your data just looks like that.
data temp ;
infile datalines dlm=' ' dsd;
input tport $ dzone $;
if not missing(tport) then _temp=tport;
if missing(tport) then tport=_temp;
if tport ne lag(tport) then count+1;
length _dzone $ 100;
retain _dzone ;
if first.count then call missing(_dzone);
if last.count then output;
drop dzone count;
proc print noobs;run;