如何计算SAS表中的观察数量?

Mun*_*ong 7 statistics sas

我是SAS的新手.现在,我有一个SAS数据表如下:

    ID       score
-------------------
    01         1
    02         3
    03         4
    04         2
Run Code Online (Sandbox Code Playgroud)

有没有办法只使用PROC SORT和DATA步骤来保存此表中的观察数量?我想在日志窗口中保存该值,就像SAS日志脚本中的"保持N = 4"一样.

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

Bel*_*Bob 8

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

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

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

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

或者,如果object只是一个数据集,则可以使用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;
Run Code Online (Sandbox Code Playgroud)

如果您的SAS数据集非常大,这肯定会更有效.我经常想知道为什么SAS不会在SET语句中将此NLOBS值作为选项提供,但我确信有理由.

PROC SQL,视图,宏变量和就地删除的观察结果对您来说可能都是新的,但随着您的SAS学习进展,您必然会开始使用它们.


Dom*_*azz 3

nobs在 set 语句中使用=。

data _null_;
set xyz nobs=nobs;
put "HOLD N=" nobs ;
stop;
run;
Run Code Online (Sandbox Code Playgroud)