Hi Anu, The SAS documentation has a specific note about using modify when you've got duplicates - it might help explain this behaviour better than I can: http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001772905.htm . Watch out for the descriptions of the datasets - where the documentation refers to Master and Transaction datasets, the terms are used in the opposite sense from your own example. If you want to overwrite the values of Desc, then you might try using "merge" instead of modify, or using hash tables. I suppose it depends on your exact circumstances, e.g. what you want to do to your Transactions table when there is no matching entry in Inventory. For example your code might read: data Inventory; format item_no 8.; format Description $20.; infile datalines dsd delimiter=','; input item_no Description $; datalines; 1,Dunlop tyre 2,tube 3,windshield 4,Boss speakers ; run; data Transactions; format purchase_id 8.; format item_no 8.; format desc $7.; infile datalines dsd delimiter=','; input purchase_id item_no desc $; datalines; 1,1,dunlop 2,1,Dunlop 3,1,Dun 4,3,windshi 5,2,tub 6,2,tub 7,4,Boss 8,4,Boss Sp 9,3,wind ; run; proc sort data=Inventory; by item_no; run; proc sort data=Transactions; by item_no; run; data Transactions; merge Transactions (in=T drop=Desc) Inventory(rename=(Description=Desc)); by item_no; if T then output; run; This would essentially delete the old Desc, and completely replace every row with the updated Description from Inventory. The equivalent with a hash table would be: data Transactions2 (rename=(Description=Desc) drop=rc); set Transactions (drop=Desc); format Description $20.; if _n_ = 1 then do; declare hash h(dataset:'Inventory'); h.defineKey('Item_No'); h.defineData('Description'); h.defineDone(); end; rc = h.find(); run; This also has the advantage that you don't have to sort the datasets as you would for merge or modify. Another method you might consider is using a custom format built from Inventory. That way your Transactions dataset only olds your Purchase_ID and Item_No fields, and the printed description would be taken by using Inventory as a lookup. This would mean the values never change in Transaction, but you could still use proc report/tabulate etc. to summary based on the "formatted" values. HTH.
... View more