Q:

Any clever way to reorganize data set (possibly with lag and output)?

Can anyone come up with a nice idea to achieve the following in SAS?
We have 
data test;
input ID $ Score Month_visit;
datalines;
Pat1 10 0
Pat1 9 3
Pat1 3 6
Pat1 7 8
;

and I want this test data to be transformed into
data final;
input ID $ Score Month;
datalines;
Pat1 10 0
Pat1 10 1
Pat1 10 2
Pat1 9 3
Pat1 9 4
Pat1 9 5
Pat1 3 6
Pat1 7 7
Pat1 7 8
;

so basically the score should be printed as often as the difference of (Month_visit - "change of Month_visit") and then just count up.
I have a feeling this could be done with the lag()- function and output statement but wasn't able do it properly so far. Any ideas?
Update:
Actually optimal would be to also cover the process for different IDs in the data set:
data test;
input ID $ Score Month_visit;
datalines;
Pat1 10 0
Pat1 9 3
Pat1 3 6
Pat1 7 8
Pat2 6 1
Pat2 2 3
Pat2 3 6
Pat2 7 8
;

Solution for the Update:
If we stick to the solution provided by @draycut, we can simply introduce a by statement into the data step, we get:
data want (drop=Month_visit:);
    merge test
          test (firstobs=2 keep=Month_visit rename=Month_visit=Month_visit_);
run;

data final;
set want;
by ID;
    if (last.ID NE 1) then do Month = Month_visit to Month_visit_-1;
        output;
    end;
    else do;
        Month = Month_visit;
        output;
    end;
run;

A:

How about this?
Also, why is Score=7 in your 8'th obs in final? Shouldn't that be 3?
data test;
input ID $ Score Month_visit;
datalines;
Pat1 10 0
Pat1 9 3
Pat1 3 6
Pat1 7 8
;

data want (drop=Month_visit:);
    merge test
          test (firstobs=2 keep=Month_visit rename=Month_visit=Month_visit_);
    if Month_visit_ ne . then do Month = Month_visit to Month_visit_-1;
        output;
    end;
    else do;
        Month = Month_visit;
        output;
    end;
run;

