Statistical programming, matrix languages, and more

Generalize function module

Accepted Solution Solved
Reply
Contributor
Posts: 20
Accepted Solution

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: 3,234

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;

View solution in original post


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

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: 20

Re: Generalize function module

Thanks!

Post a Question
Discussion Stats
  • 2 replies
  • 270 views
  • 0 likes
  • 2 in conversation