You can set your SAS Fraud Management CONSORT_EXTRACT_READER=Y consortium preference to produce a SAS macro that reads your consortium output for internal review and analysis of your consortium feeds. This review and analysis are usually done to validate your initial SAS Fraud Management implementation project, but it might also be helpful for auditing or spot-checking.
The reader is mapped one-to-one with the specific consortium data file. If you have variability of different segments for the same transaction type, the reader toggles mapping each transaction as it appears in the output. (For example, CCCA transactions with and without chip segments.) If you have a million CCCA transactions that randomly occur with and without the chip segment in a consortium file, then the consortium reader macro can contain many millions of lines of SAS code.
Deferring to your thorough testing, you can use the consortium reader macro as a base to create a shorter SAS program that reads any consortium file with the few transaction-segment variants. For example, CCCA with and without chip segments.
For regular information about the consortium reader operation, refer to the SAS Fraud Management System Administrator Guide.
Here is a CCCA consortium reader example for SAS on Microsoft Windows:
Note: It is essential to use the distinct record layouts from your access macro.
libname conslib 'c:\work\consort\' ; /* Where is work and output */
filename consin 'c:\work\consort\cccaConsortInput.txt' ; /* Where is input */
data conslib.cccaWithoutUcc; /* Create the output SAS file that does not have the ucc segment */
infile consin recfm =F lrecl = 11767 end =fini obs=10 ; /* Suggest 10 obs for fast run, but can remove */
input
@1055 ucc_seg_id_version $CHAR8. /* Added from the "with" layout to use here to filter */
@1 smh_seg_id_version $CHAR8.
@9 smh_msg_version $CHAR8.
[other fields from the reader macro]
@8219 rux_30byte_string_001 $CHAR30.
@8249 rux_30byte_string_002 $CHAR30.
;
if ucc_seg_id_version not = "01302001"; /* Keep this only if no UCC segment */
run;
data conslib.cccaWithUcc; /* Create the output SAS file that does have the ucc segment */
infile consin recfm =F lrecl = 11767 end =fini obs=10 ; /* Suggest 10 obs for fast run, but can remove */
input
@1 smh_seg_id_version $CHAR8.
@9 smh_msg_version $CHAR8.
[other fields from the reader macro]
@1054 ucm_bio_verify $CHAR1.
@1055 ucc_seg_id_version $CHAR8.
@1063 ucc_chip_data_status $CHAR1.
@1064 ucc_chip_data_scheme $CHAR1.
@1065 ucc_arqc_valid $CHAR1.
@1066 ucc_atc_card $CHAR4.
@1070 ucc_atc_host $CHAR4.
@1074 ucc_lo_atc $CHAR4.
@1078 ucc_ol_limit_host $CHAR2.
@1080 ucc_tvr $CHAR40.
@1120 ucc_cvr $CHAR48.
@1168 ucc_aip $CHAR8.
@1176 ucc_tcp $CHAR24.
@1200 ucc_chip_cond_code $CHAR1.
@1201 hqo_seg_id_version $CHAR8.
[other fields from the reader macro]
@8365 rux_30byte_string_001 $CHAR30.
@8395 rux_30byte_string_002 $CHAR30.
;
if ucc_seg_id_version = "01302001"; /* Keep this only if UCC segment is present */
run;
/* You can now use simple SAS code to analyze data - examples to print first 10 rows of each */
proc print data=conslib.cccaWithoutUcc(obs=10);
proc print data=conslib.cccaWithUcc(obs=10);
/* Optionally, you can run any analytics on these. You will likely want to cite target variables */
proc freq data=conslib.cccaWithoutUcc; /* One-way frequency table on each variable on without ucc */
proc freq data=conslib.cccaWithUcc; /* One-way frequency table on each variable on with ucc */