Hi,
Just a note... see this NOTE in your log:
40 data A_B_merged;
41 merge A B;
42 by id;
43 run;
NOTE: MERGE statement has more than one data set with repeats of BY values <--- bad Note!
NOTE: There were 16 observations read from the data set WORK.A.
NOTE: There were 8 observations read from the data set WORK.B.
NOTE: The data set WORK.A_B_MERGED has 16 observations and 4 variables.
That NOTE means you have done a many to many merge. Typically I treat that note as an error message, because the MERGE statement implements a many-to-many merge in a manner that is not intuitive and can lead to surprising results if you don't thoroughly understand the DATA step language. It does not give you a cartesian product. I don't think I've ever had a situation where I intentionally did a many-to-many merge.
In this case, I think your result could be trusted to be correct, because you know that there are always four records per ID in both work.A and work.B, or there might be 0 records per ID. You also know that the four records are sorted in the same order within ID (visit=1 to visit=4), because you created the data that way. Your merge essentially merges by ID, and when there are multiple records with the same ID, it merges by them sequentially based on order.
Still, as a general practice I would change the BY statement to be:
by id Visit ;
Because that way the BY statement is defining a unique key. My rule is in a MERGE of two data sets, you always need at least one data set to be unique by the BY variables. This will avoid that note in the log.
40 data A_B_merged;
41 merge A B;
42 by id visit;
43 run;
NOTE: There were 16 observations read from the data set WORK.A.
NOTE: There were 8 observations read from the data set WORK.B.
NOTE: The data set WORK.A_B_MERGED has 16 observations and 4 variables.
... View more