@PG Stats - Yes this is the expected result. Thanks a lot for your help on this. Appreciate and Thanks!! @KSharp - You made my day...thanks for posting the perfect code. It worked perfectly just had to add few fields to it as it was to be merged with other dataset based on a unique key.Thank you so much !!!! Thanks a lot guys...:) Just to tell you guys below was the code i was using, but the issue with it was it was splitting the ADDR1 and ADDR2 fields into 4 parts rarther than 3. DATA TEST ; LENGTH LINE1 LINE2 LINE3 $30.; ADDR1='L-9 PEARL APARTMENT BUDDHA NAGAR'; ADDR2='GHAZIABAD UTTAR PRADESHERS NEAR CROSSING'; ADDRL3 =' '; CHK_AD1 = SUBSTR(ADDRL1,31,05); CHK_AD2 = SUBSTR(ADDRL2,31,05); CHK_AD3 = SUBSTR(ADDRL3,31,05); IF CHK_AD1 > ' ' OR CHK_AD2 > ' ' OR CHK_AD3 > ' ' THEN DO; ARRAY ADD_IN(3) $60; ARRAY ADD_OUT(5) $30; ARRAY WORD(50) $60; ADD_IN(1) = ADDRL1; ADD_IN(2) = ADDRL2; ADD_IN(3) = ADDRL3; WORD_CUT = 1; LINE = 0; DO N=1 TO 3; IF LENGTH(ADD_IN(N)) > 30 THEN DO; DO I=1 TO 50 UNTIL(WORD(I) = ''); WORD(I) = TRIM(LEFT(SCAN(ADD_IN(N), I, ' '))); END; IF INDEXC(WORD(I-1),'#0123456789') > 0 THEN WORD_CUT = 2; ELSE IF (LENGTH(TRIM(LEFT(ADD_IN(N)))) - LENGTH(TRIM(LEFT(WORD(I-1))))) > 30 THEN WORD_CUT = 2; IF WORD_CUT = 2 THEN DO; NXT1 = N + LINE; NXT2 = N + 1 + LINE; ADD_OUT(NXT2) = TRIM(LEFT(WORD(I-2))) || ' ' || TRIM(LEFT(WORD(I-1))); ADD_OUT(NXT1) = SUBSTR(ADD_IN(N),1,LENGTH(ADD_IN(N)) - LENGTH(ADD_OUT(NXT2)) - 1); END; ELSE IF WORD_CUT = 1 THEN DO; NXT1 = N + LINE; NXT2 = N + 1 + LINE; ADD_OUT(NXT2) = TRIM(LEFT(WORD(I-1))); ADD_OUT(NXT1) = SUBSTR(ADD_IN(N),1,LENGTH(ADD_IN(N)) - LENGTH(ADD_OUT(NXT2)) - 1); END; LINE + 1; END; ELSE ADD_OUT(N + LINE) = ADD_IN(N); END; END; ELSE DO; ADD_OUT(1) = ADDRL1; ADD_OUT(2) = ADDRL2; ADD_OUT(3) = ADDRL3; ADD_OUT(4) = ' '; ADD_OUT(5) = ' '; END; LINE1 = ADD_OUT(1); LINE2 = ADD_OUT(2); LINE3 = ADD_OUT(3); RUN;
... View more