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;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.