PROC打印和PROC手段

时间:2018-10-21 22:57:21

标签: sas

我正在解决一个问题,有些事情我不理解。

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个观测值,我很困惑...

谢谢。

2 个答案:

答案 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。