【问题标题】:PROC PRINT and PROC MEANSPROC PRINT 和 PROC MEANS
【发布时间】:2019-03-26 00:19:25
【问题描述】:

我正在解决一个问题,但有一些我不明白的地方。

数据集 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 个观察结果,我很困惑......

谢谢。

【问题讨论】:

  • 问题出自哪里?在我看来这也是错误的,但不是因为你想的原因。
  • 它来自 Acualtests.com 考试 A00-201 问题 2 的考试。我只有基于这些问题创建的 pdf,所以肯定有一些拼写错误和奇怪的数据显示......但我不想结果只是说这是一个错字。
  • 这不是一个错字,只是错了,但你得到了你所支付的。如果您还没有参加过免费的 SAS 电子课程,我强烈建议您。

标签: sas


【解决方案1】:

OBS= 不是要处理的观察数,您应该将其视为LASTOBS= 选项(不存在)

OBS=500 单独将处理 500 行,因为隐式 FIRSTOBS 为 1。

对于FIRSTOBS=100 OBS=500 的有效情况,将处理第 100 到 500 行,即 401 行。

【讨论】:

  • 感谢您的帮助,我能够理解发生了什么。
【解决方案2】:

使用较小的数字,以便更容易检查手指。

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。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多