Hi:
What does your data look like???? This report probably -could- be done with PROC REPORT or it could be done with the pre-production DATA step interface to ODS (still experimental) or it might be able to be done with PUT _ODS_ statements.
It also depends on what destination you are interested in. You say you want PDF -- you could create this file using "classic" PUT statements with DATA _NULL_ and then distill the LISTING report manually to PDF using Adobe Acrobat or some 3rd party tool
For an idea of a possible approach with PROC REPORT, review the code and output below. Note that the report dataset was created directly with an INFILE statement -- you would have to take your data and manipulate it to be in a similar structure. It is the TYPE variable that determines what rows are shown in BOLD when the value of TYPE=HDR. The PGNUM, GRPNUM and LN_NUM variables are important because they ensure that all the "header" lines and "data" lines appear in the correct order. I only made 3 columns in the fake data and you could have more columns -- they would just need to be manipulated in the same way. I used an explicit PGNUM variable so that any "family" would not split across pages. That meant I had to create the report at least 1 time and visually inspect the report to see where the manual "break" needed to be.
Turning off the interior table lines with the STYLE override removes the interior lines; the NOHEADER option turns off all the TABLE headers, so it looks as though the fake headers in your data are the only headers there are; and the TITLE statements with J=L, J=C and J=R take care of the titles the way you want. ODS PDF TEXT= is used for the text string at the end of the report.
cynthia
[pre]
Data ReportFile;
length pgnum grpnum ln_num idval 8 type $8 col1 col2 col3 $35;
infile datalines dsd dlm=',' missover;
input pgnum grpnum ln_num type $ IDval col1 $ col2 $ col3 $;
return;
datalines;
1,1, 10, hdr, 12345,IDSNAME, SEX, AGE
1,1, 11, data, 12345,"John Doe", M, 45
1,1, 12, data, 12345,"Jane Doe", F, 44
1,1, 13, brk, 12345, ".", ".", "."
1,1, 14, data, 12345,"NAME:", "Doe Family","."
1,1, 15, data, 12345,"ID:", 12345,"."
1,1, 16, brk, 12345, ".", ".", "."
1,1, 17, hdr, 12345,KIDSNAME, SEX, AGE
1,1, 18, data, 12345,John, M, 14
1,1, 19, data, 12345,Mary, F, 12
1,1, 20, data, 12345,Billie, M, 10
1,2, 10, hdr, 22345,IDSNAME, SEX, AGE
1,2, 11, data, 22345,"Fred Flintstone", M, 45
1,2, 12, data, 22345,"Wilma Flintstone", F, 44
1,2, 13, brk, 22345, ".", ".", "."
1,2, 14, data, 22345,"NAME:", "Flintstone Family","."
1,2, 15, data, 22345,"ID:", 22345,"."
1,2, 16, brk, 22345, ".", ".", "."
1,2, 17, hdr, 22345,KIDSNAME, SEX, AGE
1,2, 18, data, 22345,Pebbles, F, 4
1,3, 10, hdr, 32345,IDSNAME, SEX, AGE
1,3, 11, data, 32345,"John Walton", M, 45
1,3, 12, data, 32345,"Olivia Walton", F, 44
1,3, 13, brk, 32345, ".", ".", "."
1,3, 14, data, 32345,"NAME:", "Walton Family","."
1,3, 15, data, 32345,"ID:", 32345,"."
1,3, 16, brk, 32345, ".", ".", "."
1,3, 17, hdr, 32345,KIDSNAME, SEX, AGE
1,3, 18, data, 32345,John , M, 14
1,3, 19, data, 32345,"Mary Ellen", F, 12
1,3, 20, data, 32345,Jason, M, 10
1,3, 21, data, 32345,Erin, F, 8
1,3, 22, data, 32345,Ben, M, 6
2,4, 10, hdr, 22345,IDSNAME, SEX, AGE
2,4, 11, data, 42345,"Ricky Ricardo", M, 45
2,4, 12, data, 42345,"Lucy Ricardo", F ,44
2,4, 13, brk, 42345, ".", ".", "."
2,4, 14, data, 42345,"NAME:", "Ricardo Family","."
2,4, 15, data, 42345,"ID:", 42345,"."
2,4, 16, brk , 42345, ".", ".", "."
2,4, 17, hdr , 42345,KIDSNAME, SEX, AGE
2,4, 18, data, 42345, Lucy, F , 6
2,4, 19, data, 42345,Ricky , M , 4
;
run;
ods listing;
proc print data=ReportFile;
title 'What is structure of dataset for PROC REPORT';
run;
options nodate nonumber;
title; footnote;
ods listing close;
ods pdf file='c:\temp\reportspecial.pdf';
ods escapechar='^';
%let repdate = %sysfunc(today(),mmddyy10.);
title j=l "Report: xxx" j=c "Company Name" j=r "Date: &repdate";
title2 j=l "code: xxx" j=c "xxxxxxx" j=r "^{thispage}";
proc report data=reportfile nowd noheader
style(report)={rules=none frame=void cellspacing=0};
column pgnum grpnum ln_num IDval type col1 col2 col3 ;
define pgnum / order noprint;
define grpnum / order noprint;
define ln_num / order noprint missing;
define IDval / order noprint;
define type / display noprint;
define col1 / display;
define col2 / display;
define col3 / display;
break after pgnum / page;
compute after grpnum;
line ' ';
endcomp;
compute col1;
if col1 in ('NAME:', 'ID:') then do;
call define(_COL_,'style','style={font_weight=bold}');
end;
endcomp;
compute col3;
if type = 'hdr' then do;
call define(_ROW_,'style','style={font_weight=bold}');
end;
else if type = 'brk' then do;
call define(_ROW_,'style','style={foreground=white background=white}');
end;
endcomp;
run;
ods pdf text='^S={just=c font_weight=bold font_size=18pt}^_^5nEnd of Report';
ods pdf close;
[/pre]