This sounds very similar to the problems in two other questions I have attempted to frame a solution to:
I don't have specifics in terms of tools or code, but my approach would be an iterative analysis script or model.
- Iterate through all segments where AGE = null/blank/whichever.
- For selected segment, select / examine adjacent segments. You may
want or need to also check / select only adjacent segments that share
a name or other common attribute (I'm thinking of two streets
intersecting - one might assume street A should match on both sides
of the intersection, not take on the age from the crossing street
B.) And you could also ignore any adjacent segment that is also AGE null.
- Now you have to make the rules - get the max, min, average, equal value and assign that age to the segment in question.
- Once you've iterated through all segments, repeat as a loop until all segments have an age.
As you note, there are several potential pitfalls in this process. Any assigned age is going to be an assumption, and because of that you may need a qualifying or whole new attribute (age and assumed age) if you want to track which is which. A particular segment may have been repaved last week or twenty years ago with no change to the adjacent segments. In your note case where you have a string of nulls with differing values on either side, do you work your way in from the ends or assume the entire series is the same age? When examining adjacent segments, how do you account for intersections (as mentioned above)?
Depending on the size of the network, number of nulls, complexity of the decision tree, and required accuracy of the data (ie researching other sources to determine what a segment age really should be), this might be better performed as a manual edit task.