Date: Wed, 11 Dec 2002 11:24:02 -0500
Reply-To: "Fehd, Ronald J. (PHPPO)" <rjf2@CDC.GOV>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Fehd, Ronald J. (PHPPO)" <rjf2@CDC.GOV>
Subject: tip TextLine replace SYSDATE in TITLE1
Content-Type: text/plain
I developed this macro to return text for titles and footnotes
NOTE can replace SYSDATE in title1 with current date and time
in whatever format user desires
NOTE usage of mVarTime and default length of WEEKDATE
as always, commentary, critique or dialogue is welcomed
well, folks, this concludes my SAS-L stocking stuffers.
be on the lookout for The Really Big One
my year-end reeeeeaally BigBox gift to SAS-L. :-)
as you each are my assets, so I am yours.
Have Happy Hollandaise.
Ron Fehd the macro maven CDC Atlanta GA USA RJF2@cdc.gov
/*TEXTLINE macro function returns quoted strings
justified in(left, center, right)
usage:
TITLE
%TEXTLINE(LEFT = 'Left'
,CENTER = 'Centered'
,RIGHT = 'Right'
);%*closure TITLE;
TITLE1
%TEXTLINE(LEFT = 'project name'
,RIGHT = "%sysfunc(time(),time5.)%sysfunc(date(),weekdate29.)"
,RM = -4
);%*move RightMargin to left for page number;
TITLE1
%TEXTLINE(LEFT = 'test of mvarTime'
,NOCENTER = 1
,RIGHT
="%MVARTIME(RETURN=%nrstr(&TIMEAMPM)) %MVARTIME(RETURN=%nrstr(&WEEKDATE))"
,RM = -4
);
NOTE if placing current time and/or date in TITLE1
remember to set options nodate
else SAS will put &SYSDATETIME in next empty TITLE line;
see test data for use with MVARTIME
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
%MACRO TEXTLINE
(LEFT = ' '
,CENTER = ' '
,RIGHT = ' '
,NOCENTER = 0 /*use Center?*/
,RM = 0 /*RightMargin: move left with negative value
suggest: -4,
for TITLE1: replace SYSDATE w/current time+datestamp */
,LINESIZE = %sysfunc(getoption(linesize))
);/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -**
RJF2 02Nov15 longest day : Wednesday,
month: September
time: HH is in 1:24
hh:mm Wednesday, September 31, 2002
15:29 Monday, November 18, 2002
123456789012345678901234567890 weekdate29.
problem: need weekdate width to vary with Month, and WeekDay
see mVars of DAY MONTH DD CCYY TIME_HH TIME_MM
note: defaults values of LEFT CENTER and RIGHT are char1.
BUT macro %length is 3, not 1
THEREFORE see fudge in repeat is not -1, but +1
RJF2 02Dec11 polishing for SAS-L stocking stuffer
;/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
&LEFT.
%IF &NOCENTER. %THEN %DO;
"%sysfunc(repeat(%str( ),&LINESIZE.+3-%length(&LEFT. )
-%length(&RIGHT.)
+ (&RM. )))" %END;
%ELSE %IF not &NOCENTER. %THEN %DO;
%local HALF LEN_CNTR;
%LET LEN_CNTR = %length(&CENTER.);
%LET HALF = %eval(&LINESIZE./2 -(&LEN_CNTR./2));
"%sysfunc(repeat(%str( ),&HALF. +1-%length(&LEFT. )))"
&CENTER.
"%sysfunc(repeat(%str( ),&HALF. +1-%length(&RIGHT.)
+ %eval(&LEN_CNTR. - 2*(&LEN_CNTR./2)) + (&RM.)))" %END;
&RIGHT.
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ %MEND;
/*TEST DATA **********************************************************
options symbolgen linesize = 66 nocenter;%*testing;
options symbolgen linesize = 80 nocenter;%*need this for time+date;
%*PUT LINESIZE<%sysfunc(getoption(linesize))>;
TITLE1 'test of! center';
TITLE1
%TEXTLINE(LEFT = 'Text on left'
,CENTER = '.!.'
,RIGHT = 'Right --]'
);
TITLE1
%TEXTLINE(LEFT = 'project name'
,RIGHT = "%sysfunc(time(),time5.)%sysfunc(date(),weekdate29.)"
,RM = -4
);%*move RightMargin to left for page number;
TITLE2
%TEXTLINE(LEFT = '1234567890123456789012345678901234567890'
,NOCENTER = 1
,RIGHT = "%sysfunc(time(),time5.)%sysfunc(date(),weekdate29.)"
);
%LET DATESTMP
= %MVARTIME(RETURN=%NRSTR(&TIMEAMPM)) %MVARTIME(RETURN=%NRSTR(&WEEKDATE));
%PUT DATESTMP<&DATESTMP.>;
TITLE3
%TEXTLINE(LEFT = 'test of mvarTime w/mVar'
,RIGHT = "&DATESTMP."
);
TITLE4
%TEXTLINE(LEFT = 'test of mvarTime'
,CENTER
="%MVARTIME(RETURN=%nrstr(&TIMEAMPM)) %MVARTIME(RETURN=%nrstr(&WEEKDATE))"
);
TITLE5
%TEXTLINE(LEFT = 'left'
,RIGHT =
"%sysfunc(time(),time5.)%sysfunc(date(),weekdate28.)"
);
TITLE6
%TEXTLINE(RIGHT = "%sysfunc(datetime(),dateampm18.)"
);
%*note use of two TEXTLINEs in one TITLE
linesize==div(linesize,2);
TITLE7
%TEXTLINE(CENTER ='TEXT on left half'
,LINESIZE = %sysfunc(getoption(linesize))/2
)
%TEXTLINE(CENTER ='right half TEXT'
,LINESIZE = %sysfunc(getoption(linesize))/2
);
%*reference lines;
TITLE8
"%sysfunc(repeat(. + !,(%sysfunc(getoption(linesize))/10) -1))";
TITLE9
"%sysfunc(repeat(1234567890,(%sysfunc(getoption(linesize))/10) -1))";
data _NULL_;file PRINT;put 'TEXTLINE test';stop;run;
;/*********************************************************************/
|