/*
/ Program : crprotds.sas
/ Version : 1.2
/ Author : Roland Rashleigh-Berry
/ Date : 30-Jul-2007
/ Purpose : Spectre (Clinical) macro to create a protocol dataset from a
/ protocol details flat file.
/ SubMacros : none
/ Notes : The protocol flat file must have a specific form for this macro
/ to work correctly. Actions are driven by special labels starting
/ in the first column as shown below. Lines that do not follow
/ this pattern will be ignored and treated as comment lines.
/
/ drugname: --- Name of drug
/ protocol: --- Name of protocol
/ report: ----- Name of report
/ titlestyle: -- Title style (max 8 chars to identify client which will also
/ be the start name of the client titles macro).
/ paper: ----- Whether A4 or Letter
/ margin: ---- Decimal number for the all-round margin in inches.
/ lmargin: ---- Decimal number for the left margin in inches (portrait).
/ rmargin: ---- Decimal number for the right margin in inches (portrait).
/ rmargin: ---- Decimal number for the top margin in inches (portrait).
/ bmargin: ---- Decimal number for the bottom margin in inches (portrait).
/ dflayout: --- Code to say whether the default page layout is landscape or
/ portrait and whether the lines are tight, followed by the
/ point size. The following examples are all valid: l9 lt9 p10
/ pt11 lt8.5 p10.5
/ dfllayout: -- Default landscape layout.
/ dfplayout: --- Default portrait layout.
/ dfltlayout: -- Default landscape tight layout.
/ dfptlayout: --- Default portrait tight layout.
/ clean: clean in (0,1) Criteria for selecting clean/unclean patients from
/ the stat.acct dataset.
/ pagexofy: "Page x of y" Default style of the "Page x of Y" label (quoted)
/ pagemac: pagexofy Macro to call to add "page x of y" labels
/ pop1: --- First defined population.
/ poplabel1: ------ First defined population label.
/ (repeat for populations up to 9)
/
/ Usage : %crprotds(flatfile,der.study)
/
/===============================================================================
/ PARAMETERS:
/-------name------- -------------------------description------------------------
/ flatfile (pos) File name of flat file containing study details.
/ dsout (pos) Output dataset containing protocol details.
/===============================================================================
/ AMENDMENT HISTORY:
/ init --date-- mod-id ----------------------description------------------------
/ rrb 13Feb07 "macro called" message added
/ rrb 07Mar07 "pagexofy" variable setup included
/ rrb 25Jun07 "pagemac" variable setup added
/ rrb 30Jul07 Header tidy
/===============================================================================
/ No guarantee as to the suitability or accuracy of this code is given or
/ implied. User uses this code entirely at their own risk.
/=============================================================================*/
%put MACRO CALLED: crprotds v1.2;
%macro crprotds(flatfile,dsout);
data &dsout;
length pop1 pop2 pop3 pop4 pop5 pop6 pop7 pop8 pop9 $ 8
paper margin dflayout dfllayout dfplayout dfltlayout
dfptlayout titlestyle $ 8
pagexofy pagemac $ 32
poplabel1 poplabel2 poplabel3 poplabel4
poplabel5 poplabel6 poplabel7 poplabel8 poplabel9 $ 80
drugname protocol report text clean $ 200;
infile "%sysfunc(compress(&flatfile,%str(%'%")))" pad eof=eof;
loop:
input @1 text $char200.;
if upcase(text) EQ: "DRUGNAME:" then
drugname=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "PROTOCOL:" then
protocol=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "REPORT:" then
report=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "TITLESTYLE:" then
titlestyle=lowcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "PAPER:" then
paper=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "MARGIN:" then
margin=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "LMARGIN:" then
lmargin=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "RMARGIN:" then
rmargin=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "TMARGIN:" then
tmargin=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "BMARGIN:" then
bmargin=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "DFLAYOUT:" then
dflayout=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "DFLLAYOUT:" then
dfllayout=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "DFPLAYOUT:" then
dfplayout=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "DFLTLAYOUT:" then
dfltlayout=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "DFPTLAYOUT:" then
dfptlayout=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "CLEAN:" then
clean=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "PAGEXOFY:" then
pagexofy=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "PAGEMAC:" then
pagemac=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP1:" then
pop1=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL1:" then
poplabel1=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP2:" then
pop2=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL2:" then
poplabel2=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP3:" then
pop3=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL3:" then
poplabel3=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP4:" then
pop4=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL4:" then
poplabel4=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP5:" then
pop5=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL5:" then
poplabel5=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP6:" then
pop6=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL6:" then
poplabel6=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP7:" then
pop7=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL7:" then
poplabel7=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP8:" then
pop8=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL8:" then
poplabel8=left(substr(text,index(text,":")+1));
else if upcase(text) EQ: "POP9:" then
pop9=upcase(left(substr(text,index(text,":")+1)));
else if upcase(text) EQ: "POPLABEL9:" then
poplabel9=left(substr(text,index(text,":")+1));
goto loop;
eof:
if lmargin=. then lmargin=margin;
if rmargin=. then rmargin=margin;
if tmargin=. then tmargin=margin;
if bmargin=. then bmargin=margin;
if pagexofy=" " then pagexofy="Page x of Y";
if pagemac=" " then pagemac="pagexofy";
output;
label drugname='Drug name'
protocol='Protocol'
report='Report'
titlestyle='Titles style'
paper='Paper form (A4, Letter, A4Letter)'
lmargin='Left margin (inches) (portrait orientation)'
rmargin='Right margin (inches) (portrait orientation)'
tmargin='Top margin (inches) (portrait orientation)'
bmargin='Bottom margin (inches) (portrait orientation)'
dflayout='Default layout'
dfllayout='Default landscape layout'
dfplayout='Default portrait layout'
dfltlayout='Default landscape tight layout'
dfptlayout='Default portrait tight layout'
clean='Criteria for selecting clean/unclean subjects from acct'
pagexofy='Style of the "Page x of Y" label'
pagemac='Macro to call to add "Page x of Y" labels'
pop1='Population 1'
poplabel1='Population 1 label'
pop2='Population 2'
poplabel2='Population 2 label'
pop3='Population 3'
poplabel3='Population 3 label'
pop4='Population 4'
poplabel4='Population 4 label'
pop5='Population 5'
poplabel5='Population 5 label'
pop6='Population 6'
poplabel6='Population 6 label'
pop7='Population 7'
poplabel7='Population 7 label'
pop8='Population 8'
poplabel8='Population 8 label'
pop9='Population 9'
poplabel9='Population 9 label'
;
drop text margin;
run;
%mend;