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

时间:2013-10-26 21:22:28

标签: statistics sas

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

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

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

对不起我的不专业描述感到抱歉。提前谢谢。

3 个答案:

答案 0 :(得分: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;

注意,如果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不会在 SET 语句中将 NLOBS 值作为选项提供,但我确定有理由。

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

答案 1 :(得分:2)

在set语句中使用nobs =。

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

答案 2 :(得分:-2)

数据 null ;

设置sashelp.vtable;

其中libname =“WORK”和memname =“DS1”;

致电symput(“count_obs”,nlobs);

运行;

%在ds1中放置的是:& count_obs;