LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (December 2004, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Mon, 13 Dec 2004 18:32:10 -0500
Reply-To:   Steve Bates <steve.bates003@MSD.GOVT.NZ>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   Steve Bates <steve.bates003@MSD.GOVT.NZ>
Subject:   Cumulative Adding

Hi There,

I need to get data from a very old database which can only store debts up to $99,999.99 per case on the db. Each case has a unique number and each client has a unique id.

If a client has a debt over the above amount then the user sets up a new case and clears the balance under the new case. If the amount is over $300,000 they would set up a third case and so on. I need to know the amount of debt per investigation and for these to be only counted once.

I've made the decision that any 2 or more cases, with a debt established, cleared within 21 days are from the same investigation. Not all cases have a debt over the $99,000. My code is as follows and seems to work but I know there must be a more efficient way of coding it:

Data is sorted by client_id datecleared ;

data trace2; set trace ; by client_id datecleared; if first.client_id then set_num = 1 ; if client_id = lag( client_id ) and datecleared - lag( datecleared ) > 21 then set_num + 1 ; run;

proc summary data = trace2 nway missing; class client_id set_num ; var debt_established ; output out = trace3 sum = tot_debt_established ; run;

data added ; merge trace2 trace3 ; by client_id set_num ; if first.set_num then counter = 1 ; if client_id = lag(client_id) and set_num = lag(set_num) and tot_debt_established = lag(tot_debt_established) then counter+1 ; run;

data case1 case2 case3 case4 case5 case6 case7 case8 case9 case10 ; set added ; if counter = 1 then output case1 ; if counter = 2 then output case2 ; if counter = 3 then output case3 ; if counter = 4 then output case4 ; if counter = 5 then output case5 ; if counter = 6 then output case6 ; if counter = 7 then output case7 ; if counter = 8 then output case8 ; if counter = 9 then output case9 ; if counter = 10 then output case10 ; run ;

data added_up ; merge case1 (in = __1__) case2 (in = __2__ keep = client_id debt_established db_unique_id rename = (debt_established = debt_established2 db_unique_id = db_unique_id2)) case3 (in = __3__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established3 db_unique_id = db_unique_id3)) case4 (in = __4__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established4 db_unique_id = db_unique_id4)) case5 (in = __5__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established5 db_unique_id = db_unique_id5)) case6 (in = __6__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established6 db_unique_id = db_unique_id6)) case7 (in = __7__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established7 db_unique_id = db_unique_id7)) case8 (in = __8__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established8 db_unique_id = db_unique_id8)) case9 (in = __9__ keep = client_id debt_established db_unique_id rename = ( debt_established = debt_established9 db_unique_id = db_unique_id9)) case10 (in = __10__ keep = client_id debt_established db_unique_id rename = (debt_established = debt_established10 db_unique_id = db_unique_id10)) ; by client_id ; if __1__ ; run ;

Can anyone please help? I know the above aint pretty! regards Steve


Back to: Top of message | Previous page | Main SAS-L page