## PROC FCMP MULT Question

Solved
Occasional Contributor
Posts: 17

# PROC FCMP MULT Question

Hello,

I'm new to PROC FCMP and am trying to get it to do some matrix multiplication as a subroutine.

As an example I have two matrices:

Z:

 LOB SIM Z A 1 -0.326592916 B 1 1.542436865

CORR:

 A B 1 0.5 0.5 1

This is as far as I've gotten:

DATA Z;

INPUT LOB \$ SIM Z;

DATALINES;

A 1 -0.326592916

B 1 1.542436865;

RUN;

DATA CORR;

INPUT A B;

DATALINES;

1 0.5

0.5 1;

RUN;

PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;

SUBROUTINE MMULT(SIM);

ARRAY Y[2]; OUTARGS Y;

ARRAY CORR[2,2] / NOSYMBOLS;

ARRAY Z[2] / NOSYMBOLS;

CALL MULT(Z, CORR, Y);

RC = WRITE_ARRAY('Z', Y, 'Y');

ENDSUB;

QUIT;

OPTIONS CMPLIB=WORK.FUNCS;

DATA TEST;

SET Z;

DO SIM=1 TO 1;

CALL MMULT(SIM);

END;

RUN;

...and I'm still getting these errors:

ERROR: Argument 3 to subroutine MULT must be a matrix at line 0 column 13.

ERROR: Error reported in function 'MULT' in statement number 5 at line 10 column 4.

Any help would be greatly appreciated!

Thanks

Emre

Accepted Solutions
Solution
‎11-14-2013 06:43 AM
Occasional Contributor
Posts: 17

## Re: PROC FCMP MULT Question

This works:

PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;

SUBROUTINE MMULT(SIM);

ARRAY Y[2]; OUTARGS Y;

ARRAY CORR[2,2] / NOSYMBOLS;

ARRAY Z[2] / NOSYMBOLS;

CALL MULT(Z, CORR, Y);

RC3 = WRITE_ARRAY('Y', Y, 'Y');

PUT Z=;

PUT CORR=;

PUT Y=;

ENDSUB;

QUIT;

OPTIONS CMPLIB=WORK.FUNCS;

DATA TEST;

SET Z;

DO SIM=1 TO 1;

CALL MMULT(SIM);

OUTPUT;

END;

RUN;

All Replies
Solution
‎11-14-2013 06:43 AM
Occasional Contributor
Posts: 17

## Re: PROC FCMP MULT Question

This works:

PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;

SUBROUTINE MMULT(SIM);

ARRAY Y[2]; OUTARGS Y;

ARRAY CORR[2,2] / NOSYMBOLS;

ARRAY Z[2] / NOSYMBOLS;

CALL MULT(Z, CORR, Y);

RC3 = WRITE_ARRAY('Y', Y, 'Y');

PUT Z=;

PUT CORR=;

PUT Y=;

ENDSUB;

QUIT;

OPTIONS CMPLIB=WORK.FUNCS;

DATA TEST;

SET Z;

DO SIM=1 TO 1;

CALL MMULT(SIM);

OUTPUT;

END;

RUN;

🔒 This topic is solved and locked.