Solved
Contributor
Posts: 21

# Generalize function module

I have two function modules VCE and VCM that differs only in the way M is computed and an additional argument CLUSTER. How can I create a single function module that can handle both computations of M?

Thanks,

Raphael

start vce(y,x,b0,b1,p1,p2,v);

... statements here ...

v = (dg(eta,p2)#dg(xb,p1)#(w-mu)/v)##2;

D = diag(v);

M = t(X)*D*X;

return(M);

finish vce;

start vcm(cluster,y,x,b0,b1,p1,p2,v);

... statements here ...

M = J(p,p,0);

v = (dg(eta,p2)#dg(xb,p1)#(w-mu)/v)##2;

uClx = unique(Cluster);

do j = 1 to ncol(uClx);

dx = loc(Cluster = uClx);

M = M + t(X[dx,])*v[dx]*t(v[dx])*X[dx,];

end;

return(M);

finish vce;

Accepted Solutions
Solution
‎04-24-2014 08:51 AM
SAS Super FREQ
Posts: 4,239

## Re: Generalize function module

Assuming you have SAS/IML 12.1 (SAS 9.3m2), use optional arguments and the ISSKIPPED function:

start vc(y,x,b0,b1,p1,p2,v, cluster=);

if isskipped(cluster) then

return( vce(y,x,b0,b1,p1,p2,v) );

else

return( vcm(cluster,y,x,b0,b1,p1,p2,v) );

finish;

All Replies
Solution
‎04-24-2014 08:51 AM
SAS Super FREQ
Posts: 4,239

## Re: Generalize function module

Assuming you have SAS/IML 12.1 (SAS 9.3m2), use optional arguments and the ISSKIPPED function:

start vc(y,x,b0,b1,p1,p2,v, cluster=);

if isskipped(cluster) then

return( vce(y,x,b0,b1,p1,p2,v) );

else

return( vcm(cluster,y,x,b0,b1,p1,p2,v) );

finish;

Contributor
Posts: 21

## Re: Generalize function module

Thanks!

🔒 This topic is solved and locked.