Hi:
Let's approach this another way. Suppose you have 3 datasets, each with two observations or rows: Datasets A, B, and C. Dataset A has the variable VAR1; dataset B has the variable VAR2 and dataset C has the variable VAR3. If you concatenate those 3 datasets together, the resulting, new, dataset will have 3 columns: VAR1, VAR2 and VAR3.
The final dataset would have 6 total rows (2 rows from each of the input datasets) and 3 columns (one column from each of the input datasets). However, dataset A only had VAR1 -- so for the rows that came from A, only VAR1 would be populated... VAR2 and VAR3 would be missing. In a similar fashion, the rows that came from dataset B would have VAR2 populated, but VAR1 and VAR3 missing; and dataset C would have VAR3 populated, but VAR1 and VAR2 would be missing in the new dataset.
The simple SET statement for concatenation does not do a "look-ahead" to see if you have variables in common in your datasets to be concatenated. It just builds a descriptor portion for the new dataset based on info from the datasets found in the SET statement. If it finds duplicate variable names, that doesn't cause SAS to do anything different that it did in the hypothetical situation -- it's only building a LIST of the variable names. Then, it starts to put rows into the new dataset.
Just as it doesn't matter in the example above that the 3 datasets have no variable in common; in your example, it also does NOT matter that your 3 datasets have the ID variable in common. In a simple concatenation, the rows from the first dataset are plopped into the new file; then the rows from the second dataset; then the rows from the third dataset ... etc, etc.
If you created a single dataset using the data in your example, you would get these results (the dashes are my annotation to show where the concatenation of one file stopped and the next file started):
[pre]
Obs ID Name Sale Bonus
1 1 Nay Rong . .
2 2 Kelly Windsor . .
3 3 Julio Meraz . .
4 4 Richard Krabill . .
----------------------------------------------------------
5 1 28000 .
6 2 30000 .
7 2 40000 .
8 3 15000 .
9 3 20000 .
10 3 25000 .
11 4 35000 .
---------------------------------------------------------
12 1 . 2000
13 2 . 4000
14 3 . 3000
15 4 . 2500
[/pre]
As you can see, it was really coincidence that all 3 of your files had an ID variable in common, but in the case of a concatenation, it didn't matter. Every value for Sale and Bonus is missing for the first 4 obs that came from Sales.Reps.
If you had done a SET with a BY statement or a MERGE with a BY statement, the results would have been different. However, with a simple concatenation, as you can see, ALL the rows from the first table precede ALL the rows from the second table -- as they were listed in the SET statement.
Does that make more sense about why the correct answer was 'missing' for that question???
cynthia