Hello,
I posted this question earlier, but I still have not received any response. I have read many stuff but still no clue.
I would greatly appreciate the help of anyone who has a solution to this problem.
My aim is to count the icode (69) for the overlap jobyrdur as 1 observation.
Jobyrdur=jobyrout-jobyrin. Icode initially is 9 but if I count the overlap jobyrdur as 1 observation final icode will be 7.
There is overlap jobyrdur for os24 jobs 2 and 3 (ie 74-78 and 78-79).
Same with Os35 jobs 5 and 6 (ie. 65-69 and 69-79). I want SAS to count the icode for 74-78 and 78-79 as 1 observation. Ie. Jobyrdur2 =79-74 = 5
Same Procedure with icode for 65-69 and 69-79: jobyrdur2=79-65=14.
My data and expected output are shown below.
Thanks in advance for your help.
ak.
data have;
input id$ job jobyrin jobyrout jobyrdur icode ;
datalines;
os24 1 63 73 10 69
os24 2 74 78 4 69
os24 3 78 79 1 69
os24 4 80 85 5 69
os24 5 86 89 3 69
os35 4 61 64 3 69
os35 5 65 69 4 69
os35 6 69 79 10 69
os84 7 67 75 8 69
;
Expected output (data want)
inidnew$ job jobyrin jobyrout jobyrdur2 icode;
os24 1 63 73 10 69
os24 2_3 74 79 5 69
os24 4 80 85 5 69
os24 5 86 89 3 69
os35 4 61 64 3 69
os35 5_6 65 79 14 69
os84 7 67 75 8 69
I am tempted to merge this question back into the old one. It is not useful at all to repost an unanswered question.
And please show what you have tried so far, @mkeintz suggested some changes to your code.
Do not use 2-digit years. Remember the Y2K scare.
"Those who do not learn from history are doomed to repeat it".
See this:
data have;
input id$ job jobyrin jobyrout jobyrdur icode $;
datalines;
os24 1 1963 1973 10 69
os24 2 1974 1978 4 69
os24 3 1978 1979 1 69
os24 4 1980 1985 5 69
os24 5 1986 1989 3 69
os35 4 1961 1964 3 69
os35 5 1965 1969 4 69
os35 6 1969 1979 10 69
os84 7 1967 1975 8 69
;
data want;
merge
have (rename=(job=_job))
have (
firstobs=2
keep=id jobyrin
rename=(id=_id jobyrin=_jobyrin)
)
;
length job $10;
retain job __jobyrin;
if _n_ = 1 then __jobyrin = jobyrin;
job = catx("_",job,_job);
if id ne _id or jobyrout ne _jobyrin
then do;
jobyrin = __jobyrin;
jobyrdur = jobyrout - jobyrin;
output;
job = "";
__jobyrin = _jobyrin;
end;
drop _id _job _jobyrin __jobyrin;
run;
I merged all your posts dealing with the same issue into one thread. Please keep questions in one place in the future.
Wondering, why my not-that-helpful answer got marked as solution.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.