我正在解决一个问题,有些事情我不理解。
sasdata.prdsales数据集包含5,000个观测值。
libname sastemp 'SAS-data-library';
options obs=500;
proc print data=sasdata.prdsales (firstobs=100);
run;
options obs=max;
proc means data=sasdata.prdsales(firstobs=500);
run;
我的理解是,OBS =指定SAS将处理的观察数,因此对于PROC PRINT语句,我认为从观察数100开始,在观察数499结束,将要处理500个观察。
对于PROC MEANS步骤,OBS = MAX指示SAS处理所有观测值,但是由于起始观测值是500,因此观测值的总数将从500到5,000,即4,501个观测值。
但是,对此问题的回答说,PROC PRINT有501个观测值,我很困惑...
谢谢。
答案 0 :(得分:5)
OBS=
不是要处理的观察数,您应该将其视为LASTOBS=
选项(不存在)
OBS=500
仅因隐式FIRSTOBS为1而将处理500行。
对于FIRSTOBS=100 OBS=500
的有效情况,将处理第100至500行,即401行。
答案 1 :(得分:1)
使用较小的数字,以便更轻松地检查手指。
1 options obs=10;
2 proc print data=sashelp.class(firstobs=5);
3 run;
NOTE: There were 6 observations read from the data set SASHELP.CLASS.
Obs Name Sex Age Height Weight
5 Henry M 14 63.5 102.5
6 James M 12 57.3 83.0
7 Jane F 12 59.8 84.5
8 Janet F 15 62.5 112.5
9 Jeffrey M 13 62.5 84.0
10 John M 12 59.0 99.5
因此它从Obs#5开始,在Obs#10停止。 10-5 + 1 = 6。
因此,对于您的问题,您可以计算出500-100 + 1 = 401。
另一种思考方式是,通过设置FIRSTOBS = N,您将被告知跳过N-1个观测值。因此FIRSTOBS = 100表示跳过99个观察值。 500-99 = 401。