【问题标题】:How to count the number of observations in a SAS table?如何计算 SAS 表中的观察数?
【发布时间】:2013-10-26 21:22:28
【问题描述】:

我对 SAS 很陌生。现在,我有一个 SAS 数据表如下:

    ID       score
-------------------
    01         1
    02         3
    03         4
    04         2

有没有办法仅使用 PROC SORT 和 DATA 步骤保存此表中的观察次数?我想将值保存在日志窗口中,就像 SAS 日志脚本中的“hold N=4”。

对不起,我的描述不专业。提前致谢。

【问题讨论】:

  • 为什么要将自己限制在 proc 排序和数据步骤中?

标签: statistics sas


【解决方案1】:

作为新的 SAS 用户,NOBS 选项可能就是您所需要的。但是,随着您的编码技能的提高,您可能会发现自己处于不合适的情况。 SET 语句中的 NOBS 选项可能不适用于所有情况。返回的值将是数据集中物理观察的数量,包括可能已就地删除的任何观察。它也可能不适用于某些视图(尤其是连接到外部数据库的视图)。

在数据集或视图中查找未删除观察数的“最安全”方法是使用PROC SQL 并实际计算它们,将结果放入宏变量中。例如,假设您有一个名为 HAVE 的数据对象:

proc sql noprint;
   select count(*) into : nobs
   from WORK.HAVE;
quit;
%put 'Obs in data set:' &nobs;

请注意,如果 HAVE 是数据集或视图,则此方法有效。

或者,如果您的对象只是一个数据集,您可以使用 SAS TABLES Dictionary 视图返回 NLOBS 属性,该属性具有“逻辑”观察的数量(即占任何已删除的行):

proc sql noprint;
   select nlobs into : nobs
   from dictionary.tables
   where libname='WORK'
    and memname='HAVE';
quit;
%put 'Obs in data set:' &nobs;

如果您的 SAS 数据集非常大,这肯定会更有效。我经常想知道为什么 SAS 不将这个 NLOBS 值作为 SET 语句的一个选项提供,但我确信这是有原因的。

PROC SQL、视图、宏变量和就地删除的观察现在对您来说可能是全新的,但随着您学习 SAS 的进步,您一定会开始使用它们。

【讨论】:

    【解决方案2】:

    在 set 语句中使用nobs=。

    data _null_;
    set xyz nobs=nobs;
    put "HOLD N=" nobs ;
    stop;
    run;
    

    【讨论】:

      【解决方案3】:

      数据 null;

      设置 sashelp.vtable;

      其中 libname="WORK" 和 memname="DS1";

      调用 symput("count_obs",nlobs);

      运行;

      %put obs in ds1 is :&count_obs;

      【讨论】:

      • 如果有很多表会很慢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多