Hi everybody, I have a data set like the following one (which is created from three different data sets of similar structure). data have; input ID $ Product $ Acc $ Type $ Value1 Value2 Value3; datalines; 1 C 3 Red 3 3 1 1 A 1 Blue 2 1 0 2 D 2 Orange 0 2 . 2 B 4 Yellow 4 4 2 3 B 3 Blue 5 3 . 3 C 5 Orange 1 1 . ; Now, I want to perform some "intra-observation" checks to detect errors and also sometimes conditionally create new rows like in this example: data want; set have; by ID; if Value1 ^= Value2 then Err = 'E1'; output; if Type in ('Blue','Orange') and find(Product,'E') = 0 then do; Product = 'E'; Acc = ''; Type = ''; Value1 = .; Value2 = .; Value3 = .; Err = 'E2'; if last.ID then output; end; run; Besides, I also want to perform "inter-observation" checks for each ID, f. ex. whether for certain combinations of Product and Acc some condition is fulfilled, f. ex. (fake code): do over ID; if for comb('B','4') Value1 > 0 and for comb('D','2') Value1 = 0 then do; ...
Err = 'E3';
if last.ID then output;
end; end; (note that I am referring to obs 4 and 3 in the "have" data set). I have not been able to do this within a data step and I am starting to think that this operation might only possible with "proc iml" or some other way. However, I have no experience in working with SAS/IML and thus, any suggestions are appreciated.
... View more