Difference in dates in SAS by group -
consider data set test in following form:
group date 1 05jan2014 1 08jan2014 1 14jan2014 2 05jan2013 2 10feb2015 2 27feb2015 i want calculate difference in dates based on group. code below takes difference between every 2 dates:
data test; datediff = dif(date); run; how take difference between dates in 1 group? moreover, there way take difference between last , first dates in each group?
starting this:
data test; datediff = dif(date); run; let's address isues 1 @ time. first, adding set statement , by statement, can add first , last allow determine in group. assumes it's sorted by group.
data test2; set test; group; datediff=dif(date); run; this doesn't work differently (assuming had set statement originally, anyway). now, have new options.
first, while can use dif, recommend retain method this. can more see it's doing, , avoid common pitfalls: particularly, lag , dif don't compare previous record - create queue , compare that, can lead complications when using conditional statements.
data test2; set test; group; retain last_date; if first.group last_date=0; datediff = date - last_date; output; last_date = date; run; this same thing before - compares previous value current value - makes bit easier see, , add in option reset last_date variable when first.group true - meaning we're on first row of new value of group. won't drop of these intermediate variables, in production code can , should. retain means value persist across rows (instead of being reset every time new row).
now have 1 variable tracking previous row's value of date, it's pretty easy see how can first->last difference.
data test2; set test; group; retain last_date orig_date; if first.group do; last_date=0; orig_date=date; **new; end; datediff = date - last_date; if last.group group_datediff = date-orig_date; **new; output; last_date = date; run; now we've done same thing before - we're resetting orig_date each time see first.group , calculating group_datediff when hit last.group.
Comments
Post a Comment