9

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

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

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

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

4

3 回答 3

9

作为一个新的 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 的进步,您一定会开始使用它们。

于 2013-10-27T16:39:25.270 回答
3

nobs在 set 语句中使用=。

data _null_;
set xyz nobs=nobs;
put "HOLD N=" nobs ;
stop;
run;
于 2013-10-26T21:45:14.237 回答
-2

数据

设置 sashelp.vtable;

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

调用 symput("count_obs",nlobs);

跑;

%put obs 在 ds1 是 :&count_obs;

于 2014-03-17T20:18:02.893 回答