inObs= specifies the total number of rows to read in. obs= specifies the row number where you should stop reading. The firstObs= option specifies the first row of data tobe read, and it's easier to see the difference between obs= and inObs= if you apply firstOBS= in conjunction with those options and compare the results:
/* inObs= vs obs= with firstObs=*/
proc sql inobs=50 number;
title 'InObs=50, firstObs=20';
select *
from sashelp.cars(firstObs=20)
;
quit;
title 'obs=50, firstObs=20';
proc sql number;
title 'obs=50, firstObs=20';
select *
from sashelp.cars(firstObs=20 obs=50)
;
quit;
Note that the first query returns 50 rows, but the second query only returns 31 rows.