BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
R_Fraser
Calcite | Level 5

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;

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

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;

View solution in original post

2 REPLIES 2
Rick_SAS
SAS Super FREQ

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;

R_Fraser
Calcite | Level 5

Thanks!

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 2 replies
  • 1314 views
  • 0 likes
  • 2 in conversation