BookmarkSubscribeRSS Feed
_Manhattan
Quartz | Level 8

Hello,

 

I would like to generate a PDF document that includes two pieces of information. Firstly, information about a variable (e.g., label, coding, items), and secondly, frequency tables. The challenge I'm facing is that I have multiple variables or variable stems (e.g., Var1), and for each of these variables, I want to create multiple frequency tables (e.g., Var1a, Var1b, Var1c). The issue I'm encountering is that I don't know how to report the corresponding frequency tables on the same page as the variable information for the variable stem (e.g., Var1). In the example code below, a PDF with 3 pages is generated, with the frequency tables (Var1a, Var1b, and Var1c) distributed across the 3 pages. However, I would like to print the three tables on page 1 alongside their variable stem (Var1) information. Does anyone know how I could structure the data and change my code so that I can report several proc report tables on one page/attach these tables to the variable information of the variable stem?

 

/* Data for Variable Information*/
data VariableInfo;
  input Variable $ Beschriftung $ Kodierung $;
  datalines;
Var1 Variable 10
Var2 Variable 20
Var3 Variable 30
;

/* Data for frequencies */
data ExampleData;
  input ID Var1a Var1b Var1c;
  datalines;
1 10 20 1
2 15 25 0
3 20 30 1
4 10 20 1
5 15 25 0
6 20 30 1
;


/* Generate frequencies and save them as separate tables */
%macro GenerateFrequencyTables;
  %let varlist = Var1a Var1b Var1c;

  %do i = 1 %to %sysfunc(countw(&varlist));
    %let variable = %scan(&varlist, &i.);

    proc freq data=ExampleData;
      tables &variable / out=freqtable&variable;
    run;
  %end;
%mend GenerateFrequencyTables;
%GenerateFrequencyTables;

/* Macro for a pdf with Variable Info and frequency tables */
%macro ReportFrequencyTables;
  ods pdf file="yourpath\ExampleFrequencyTables.pdf"; 

  %let varlist = Var1a Var1b Var1c;
  %let vari = Var1 Var2 Var3;
  
  %do i = 1 %to %sysfunc(countw(&varlist));
  
    %let variable = %scan(&varlist, &i.);
    %let varinfo = %scan(&vari, &i.);
    
    ods pdf startpage=now;
  	ods layout start width=19cm height=28cm;
  	
    proc report data=VariableInfo;
    where Variable contains "&varinfo";
    run;

    proc report data=FreqTable&Variable;
    column &variable COUNT PERCENT;
    run;
 
   
ods layout end;
%end;

ods pdf close; 
 
%mend ReportFrequencyTables;
%ReportFrequencyTables;

In case you are wondering why I am producing the frequency tables outside my ReportFrequencyTables Macro: That is because I am using (have to use) a predefined macro for frequencies in my report. But if it there is a solution that depends on generating the frequencies inside the ReportFrequencyTables macro, I will check if that is possible.

 

Kind regards

3 REPLIES 3
PaigeMiller
Diamond | Level 26

Assuming these two tables will fit on one page of your PDF file, you can use the option STARTPAGE=NO

https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/odsug/n0mc4eolqoned0n16oy88mpj0e4g.htm#n0c86q...

--
Paige Miller
_Manhattan
Quartz | Level 8

Thank you for your reply! Unfortunately, I do not understand from the documentation where to put the ods startpage statement to receive the wanted result. Could you help me out and modify the code?

PaigeMiller
Diamond | Level 26
It is not ODS STARTPAGE
It is an option that you put in the ODS PDF statement.
--
Paige Miller

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 885 views
  • 1 like
  • 2 in conversation