Thanks Tom, Actually, I prefer your approach to macro. The above dataset is a sample of a larger one and when I ran the larger macro I usually receive errors about quoted strings,etc. like shown below: NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. ************************************************************************************************* So I would like to try your approach: Basically, these are my objectives: -Find duration in years (jobyrout-jobyrin), if no overlap in years-calculate it direct: - If overlap eg:osa73 jobs 1 (jobyrout 31) and 2 (jobyrin 31): then final duration will be from 23 to 42 ie. 42 minus 23, so osa73 will have one line. Same with osh77 jobs 1 and 2: 66 overlaps so final duration will be from 63-70 ie. 70 minus 63. -if jobyrin=jobyrout assign 0.5. -osj17 job 3 duration :60-75 and job 4 duraiton 65-70: another special overlap: Here duration for osj17 will be 60 to 75 ie. 75-60. Please read the summary of the task below: ************************************************************************************************************** Please, this is what I want to achieve: 1) Verify if job 1 overlaps with job 2. If not, do nothing. If yes, assign job 1 start year to job 2 and, when **necessary (see when necessary situation below), also assign job 1 end year to job 2. Once this is done, job 1 start and end years are recoded as missing to eliminate this job from the duration calculation (to avoid counting twice the same years) ** When necessary: eg. Please see osj 17 jobs 3 and 4: If job 1 go from 1960 to 1975 and job 2 go from 1965 to 1970, then the duration for those two jobs should be from 1960 to 1975. Since the code work by “deleting” the earliest jobs and modifying the later job dates, we need to recode job 2 YEARIN and YEAROUT to the YEARIN and YEAROUT of job 1. 2) Repeat the process with the newly recoded job 2 (or original job 2 if it didn't overlap with job 1) and job 3. This process is repeated until all jobs are examined (up to the maximum number of jobs specified by the array length) 3) Assign a value of 0 the any missing start or stop year and calculate the duration of each remaining job (jobs with same start and stop years are coded as lasting 0.5 year 4) Sum all the durations to obtain the final duration variable 5) Create the final dataset including IDs, the total duration variable, and the ever held job variable * So What you did is right, two more things to do, however,please: -Assigning 0.5 to same jobyrout = 70 and jobyrin= 70 for eg. osf26 job 6. 70-70 not zero but 0.5 in this situation. -the special overlap situation: osj17 jobs 3 and 4. Thanks very much for your assistance. I would appreciate if you could help me fix the 2 tasks in your code above. Thanks again. ak.
... View more