When you run the program you can see that the first data step only produce one row. That is because each input statement reads a new line of the input data.
So, in your case:
Read the two first values from the first row.
Read a new line of input data and read the two first values of that row.
Return to the start of the code and read a new line of input data. Et cetera!
The second data step has a @ in the end of the first input statement. This tells SAS to wait on the first input data row until you tell it otherwise.
So, in your case:
Read two values from the first row.
Then read two more values.
Return to the start of the code and read a new line of input data. Et cetera!
The @ char is useful if you for example have data that has a different format on different rows. So, if the first value is US you need to use DATE9 as informat and if you have the first value of EUR you use the ISO standard YYMMDD10. Or it might be that the data you have spans more than one row, so row 1 in each set has a name and row 2 has an address.