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;
RC = READ_ARRAY('CORR', CORR);
RC = READ_ARRAY('Z', Z, 'Z');
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
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;
RC1 = READ_ARRAY('CORR_COP', CORR);
RC2 = READ_ARRAY('Z', Z, 'Z');
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 works:
PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;
SUBROUTINE MMULT(SIM);
ARRAY Y[2]; OUTARGS Y;
ARRAY CORR[2,2] / NOSYMBOLS;
ARRAY Z[2] / NOSYMBOLS;
RC1 = READ_ARRAY('CORR_COP', CORR);
RC2 = READ_ARRAY('Z', Z, 'Z');
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;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.