/********************************************************************* FILENAME: UPDATEWITHVALID.SAS SUBJECT HEADING: DATA INITIALS: BML DATE: 31 JUL 96 PROGRAM: SAS VERSION: 6.11 TS040 PLATFORM: WINDOWS TITLE: REPLACE THE VALUES IN A MASTER DATASET WITH THE NONMISSING VALUES OF A TRANSACTION DATASET DESCRIPTION: IF YOU HAVE A MASTER DATASET THAT YOU WANT TO UPDATE WITH VALUES FROM A TRANSACTION DATASET, BUT YOU ONLY WANT TO UPDATE IF THE VALUE IN THE TRANSACTION DATASET IS NOT MISSING, THEN THIS CODE SHOWS YOU HOW TO DO IT. THE ONLY REQUIREMENT IS THAT BOTH DATASETS MUST HAVE A VARIABLE WITH VALUES THAT UNIQUELY IDENTIFY EACH INDIVIDUAL 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 AN UPDATE IS MADE IF AND ONLY IF THE VALUE IN THE TRANSACTION DATASET IS NOT MISSING! SPECIFICALLY, THE 575.12 IN THE ORIGINAL DATASET HAS BEEN REPLACED WITH 999.99! */ data final; present = 0; update master(in=present) transact; by id; if present; run; proc print data=final; title 'printout of dataset with updated values'; run;