BookmarkSubscribeRSS Feed
ziporapr
Fluorite | Level 6

I need to process a dynamic document. When the document is short it works great. When it is too long the text disappears from the PDF. Attached is a sample SAS

code. If the following lines are starred:

% hachpala (8);

% hachpala (9);

The file comes out fine, otherwise the page goes wrong. Why? What can be done to make it work well?

 

%let koteret1=^S={font_size=10pt font_face=Arial FONT_WEIGHT=Bold just=right};
%let text1=^S={font_size=10pt font_face=Arial just=right};
%let kav_mafrid=^S={font_size=8pt color=bgr }____________________________________________________________________________________________________________________________;
%let path=C:\Users\xxx\Desktop;

ods _all_ close;
options 
orientation = portrait     spool     lrecl=max     urlencoding=utf8      dev=actximg      locale=HE_IL   papersize= A4 
nodate  nonumber topmargin= 0cm  bottommargin = 0cm leftmargin = 1cm rightmargin = 1cm       printerpath= pdf;    
ods noproctitle;
title;
footnote;
ods escapechar = '^';
ods pdf file="&path.\test.pdf"    /*uniform*/   /* notoc*/ startpage=yes /*gtitle gfootnote*/ ;
title1 j=center "סמל ארגון";
title2 j=left "כותרת שמאל" 
           j=center "^{style [font_size=12pt font_face=Arial FONT_WEIGHT=Bold color=bgr ] שם ארגון }"
          j=right "כותרת ימין" ;

footnote1 j=center "^{lastpage} דף ^{thispage} מתוך";
%macro hachpala(mis_hadpasa);
ods layout start  columns=1;
     ods region width=100% style={just=right};
         ods pdf text=" &kav_mafrid ";     
                ods pdf text="^{ newline 1}";
           ods pdf text="&koteret1 כותרת &mis_hadpasa";     
           ods pdf text=" &kav_mafrid ";    
ods layout end;

     ods pdf text="^{ newline 1}";

%macro ods_pdf_text(N);
     ods pdf text="&text1 עמודה &N";
     ods pdf text="&text1 עמודה &N";
     ods pdf text="&text1 עמודה &N";
%mend;

ods layout start  columns=4;
     ods region width=25% style={just=right};
           %ods_pdf_text(4);
     ods region width=25% style={just=right};
           %ods_pdf_text(3);
     ods region width=25% style={just=right};
           %ods_pdf_text(2);
     ods region  width=25% style={just=right};
           %ods_pdf_text(1);
ods layout end;
%mend;
%hachpala(1);
%hachpala(2);
%hachpala(3);
%hachpala(4);
%hachpala(5);
%hachpala(6);
%hachpala(7);
%hachpala(8);
%hachpala(9);

ods pdf close;
ods _all_ close;

 

5 REPLIES 5
ballardw
Super User

Which text disappears? Everything, some lines ?

 

With your locale options and such I can't reliably test your code as written on my system.

 

One coding style comment: It may be a good idea to keep things like MACRO definitions outside of ODS destination blocks.

It is definitely a good idea not to nest macro definitions inside other macros. It can be anywhere from annoying to extremely difficult to debug macro code when you make a logic mistake or typo involving scope of macro variables in any form. When a macro definition is nested in another macro your macro potentially changes with call to the outer macro.

 

 

Cynthia_sas
Diamond | Level 26
Hi:
My recommendation is that you work with SAS Tech Support. Nobody can run your code without knowing the value of the macro variables. Also, I agree -- you should NEVER have a macro definition inside your ODS PDF destination statements as you show. The macro calls can be there, but not the %MACRO/%MEND. But the bottom line is that Tech Support will need to replicate your system version, your locale, your invocation environment (were you using EG, SAS Studio, SAS on Windows, SAS in a BI environment) in order to help debug your issues.
Cynthia
ziporapr
Fluorite | Level 6

I changed the previous one to be international. I took out the macro. It still does not work.

%let path=C:\Users\xxx\Desktop;

ods _all_ close;
options 
orientation = portrait     spool     lrecl=max    /* urlencoding=utf8*/      dev=actximg      /*locale=HE_IL*/   papersize= A4 
nodate  nonumber topmargin= 0cm  bottommargin = 0cm leftmargin = 1cm rightmargin = 1cm       printerpath= pdf;    
ods noproctitle;
title;
footnote;
ods escapechar = '^';
ods pdf file="&path.\test.pdf"    /*uniform*/   /* notoc*/ startpage=yes /*gtitle gfootnote*/ ;
title1 j=center "organization icon";
title2 j=left "left title" 
           j=center "^{style [font_size=12pt font_face=Arial FONT_WEIGHT=Bold color=bgr ] organization name }"
          j=right "right title" ;

footnote1 j=center "^{lastpage} ^{thispage} ";
%macro ods_pdf_text(N);
     ods pdf text="&text1 column &N";
     ods pdf text="&text1 column &N";
     ods pdf text="&text1 column &N";
%mend;
%macro multiplication(print_N_);
ods layout start  columns=1;
     ods region width=100%;
         ods pdf text=" &kav_mafrid ";     
                ods pdf text="^{ newline 1}";
           ods pdf text="&koteret1 title &print_N_";     
           ods pdf text=" &kav_mafrid ";    
ods layout end;

     ods pdf text="^{ newline 1}";
ods layout start  columns=4;
     ods region width=25% style={just=right};
           %ods_pdf_text(1);
     ods region width=25% style={just=right};
           %ods_pdf_text(2);
     ods region width=25% style={just=right};
           %ods_pdf_text(3);
     ods region  width=25% style={just=right};
           %ods_pdf_text(4);
ods layout end;
%mend;
%multiplication(1);
%multiplication(2);
%multiplication(3);
%multiplication(4);
%multiplication(5);
%multiplication(6);
%multiplication(8);
%multiplication(9);
%multiplication(10);

ods pdf close;
ods _all_ close;

 

Cynthia_sas
Diamond | Level 26

Hi:

  I don't understand what you mean when you said that you have "made it international" . The macro definitions are still INSIDE the ODS PDF statements. Is something like this what you intend to produce? I notice that the ODS LAYOUT text that you're writing with the generated code is causing the  Page 2 text to be overlaid with the other text strings. You need to define your LAYOUT and REGIONS to avoid this.

Cynthia_sas_1-1608154410958.png

 

 

  I changed a few things in your code. For example, I changed the footnote text to show the standard Page X of Y. I removed all the extraneous options and tried to simplify them. I removed the ODS PDF options that didn't seem relevant. I also, made up some fake values for the macro variables and changed the color for titles and footnotes. Here's the annotated code:

Cynthia_sas_2-1608155000164.png

 

  I still think working with Tech Support might be your best resource, since it seems that this is part of a possibly larger output creation and I'm not sure that your macro code is doing what you think it should be doing. Do you have a working program that produces what you want without having ANY macro code in it at all?

 

Cynthia

ziporapr
Fluorite | Level 6
How can I define my LAYOUT and REGIONS to avoid overlaid with the other text strings?
I want to define dynamic text, and to use only percent layout

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 5 replies
  • 2051 views
  • 3 likes
  • 3 in conversation