/********************************************************************* FILENAME: TOTALUPDATE.SAS SUBJECT HEADING: DATA INITIALS: BML DATE: 31 JUL 96 PROGRAM: SAS VERSION: 6.11 TS040 PLATFORM: WINDOWS TITLE: UNCONDITIONALLY REPLACE THE VALUES OF A DATASET WITH NEW VALUES FROM A TRANSACTION DATASET DESCRIPTION: IF YOU WANT TO UNCONDITIONALLY REPLACE THE VALUES IN ONE DATASET WITH VALUES FROM ANOTHER DATASET, THIS CODE WILL DO IT. THERE MUST BE AN ID VARIABLE IN BOTH DATASETS THAT UNIQUELY IDENTIFIES EACH CASE. **********************************************************************/ options linesize=72; /* FIRST WE CREATE A MASTER DATASET THAT CONTAINS MISSING VALUES FOR SOME OF THE VARIABLES. */ data master; input id var1 var2 $ var3; datalines; 1 3478 able 234.45 2 4562 . 634.23 3 . charlie . 4 5695 delta . 5 . . 575.12 ; proc print data=master; title 'printout of master dataset with missing values'; run; /* NOW WE CREATE A TRANSACTION DATASET THAT HAS REPLACEMENT VALUES FOR SOME OF THE MISSING DATA IN THE MASTER DATASET. */ data transact; input id var1 var2 $ var3; datalines; 3 . . 999.99 5 . gamma 999.99 ; proc print data=transact; title 'printout of transaction dataset with replacement values'; run; /* NOW WE SORT BOTH DATA SETS BY THE COMMON CASE ID VARIABLE. */ proc sort data=master; by id; proc sort data=transact; by id; run; /* FINALLY, WE UPDATE THE MASTER DATASET WITH THE NEW VALUES. NOTE THAT THE TRANSACTION DATASET COMES SECOND IN THE UPDATE STATEMENT. ALSO NOTE THAT EVERY ORIGINAL VALUE HAS BEEN REPLACED WITH A NEW VALUE. IN SOME CASES, VALID DATA HAS BEEN REPLACED WITH A MISSING VALUE! */ data final(drop=newvar1 newvar2 newvar3); present = 0; merge master(in=present) transact(rename=(var1=newvar1 var2=newvar2 var3=newvar3)); by id; var1 = newvar1; var2 = newvar2; var3 = newvar3; if present; run; proc print data=final; title 'printout of dataset with updated values'; run;