After tackling this problem for the last 4 hours I'm getting close to what I want which is 2 SAS data sets one for Team 123 of Segment ABC and one SAS data set for team 125 of Segment ABC by making the first field to be character but it needs to be numeric.
But I also want to check the sum of COL1, COL2, COL3 & AMT_OUTSTANDING against the trailers if possible in my code below and I'm much grateful for any suggestions to make this thing works.
COL1 COL2 COL3 AMT_OUT
NO OF POL FOR TEAM 124 --------------- --------------- ---------------
8288.22 8288.22 13249.152 4630.2032
To re-create the csv file please copy the text to notepad and rename the extension to .csv to test out the code.
%macro attributes ; %local maxlength ; %let maxlength = $200. ; %do i = 1 %to 9 ; length field&i &maxlength. ; %end ; /* */
attrib ID_NO length=$20.; attrib CNT length=$10.; attrib FIRM length=$50.; attrib CITY length=$20.; attrib ZIP length=$4.; attrib DATE1 length=$10. ; attrib TYPE length=$5.; attrib POL_NO length=$10.; attrib POL_CODE length=$5.; attrib DATE_ADDED length=$10. ; attrib COL1 length=8. ; attrib COL2 length=8. ; attrib COL3 length=8. ; attrib AMT_OUTSTANDING length=8.;
%mend ;
%macro readFile(outds=, source=) ;
%let file = J:\HAVE.CSV ;
data &outds (drop=field:); infile "&file." MISSOVER DSD DLM="," firstobs=1 LRECL=1024 end=eof ;
%attributes ;
input field1-field14 ;
ID_NO = field1; CNT = field2; FIRM = field3; CITY = field4; ZIP = field5; DATE1 = field6; TYPE = field7; POL_NO = field8; POL_CODE = field9; DATE_ADDED = field10; COL1 = input(field11, best23.2); COL2 = input(field12, best23.2); COL3 = input(field13, best23.2); AMT_OUTSTANDING = input(field14, best23.2);
if compbl(substr(ID_NO,1,3)) in ('PRO','COM','NEW','FOR','FUN','SOL','ABN','NO','ID ','---','N.B','* *',' ') then delete ;
run ; %mend ;
%macro process (source=); %readFile (source=&source, outds=&source._read) ; %mend ;
%process (source=HAVE) ;
... View more