Hi gamotte, thank you for your reply. I have changed my macro by removing the %s on the if statement (and kept it on the do loop) to get: %macro h2f1(GH,a=,b=,c=,z=);
gausshyper=1; tempgauss=1;
if abs(&z.)<1 then do;
%do j=1 %to 160;
tempgauss=tempgauss*(&a. + &j – 1)*(&b. + &j –1)* &z. /((&c. + &j –1)*&j);
gausshyper=gausshyper + tempgauss;
%end;
end;
if abs(&z.)=1 and &c. – &a. – &b. > 0 then do;
%do j=1 %to 160;
tempgauss=tempgauss*(&a. + &j – 1)*(&b. + &j –1)* &z. /((&c. + &j –1)*&j);
gausshyper=gausshyper + tempgauss;
%end;
end;
&GH=gausshyper;
%mend h2f1; It now runs the do=j to 160 loop, however it now produces this error with the preceding lines: MLOGIC(H2F1): Beginning execution.
MLOGIC(H2F1): Parameter GH has value F
MLOGIC(H2F1): Parameter A has value r+s+x
MLOGIC(H2F1): Parameter B has value param2
MLOGIC(H2F1): Parameter C has value r+s+x+1
MLOGIC(H2F1): Parameter Z has value absab/(maxab+tx)
MPRINT(H2F1): gausshyper=1;
MPRINT(H2F1): tempgauss=1;
SYMBOLGEN: Macro variable Z resolves to absab/(maxab+tx)
MPRINT(H2F1): if abs(absab/(maxab+tx))<1 then do;
MLOGIC(H2F1): %DO loop beginning; index variable J; start value is 1; stop value is 160; by
value is 1.
SYMBOLGEN: Macro variable A resolves to r+s+x
SYMBOLGEN: Macro variable J resolves to 1
NOTE 137-205: Line generated by the invoked macro "H2F1".
124 tempgauss=tempgauss*(&a. + &j – 1)*(&b. + &j –1)* &z. /((&c. + &j –1)*&j);
_
22
124 ! gausshyper=gausshyper + tempgauss;
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, ), *, **, +, -, /, <, <=,
<>, =, >, ><, >=, AND, EQ, GE, GT, IN, LE, LT, NE, NOTIN, OR, ^<, ^=, ^>, |, ||,
~<, ~=, ~>. Thank you, the initial problem has resolved but now I'm unsure how to resolve this new one (apologies, I'm still learning the macro side of SAS).
... View more