我对 SAS 很陌生。现在,我有一个 SAS 数据表,如下所示:
ID score
-------------------
01 1
02 3
03 4
04 2
有什么方法可以仅使用 PROC SORT 和 DATA 步骤保存此表中的观察数?我想将值保存在日志窗口中,就像 SAS 日志脚本中的“hold N=4”一样。
对不起我不专业的描述。提前致谢。
我对 SAS 很陌生。现在,我有一个 SAS 数据表,如下所示:
ID score
-------------------
01 1
02 3
03 4
04 2
有什么方法可以仅使用 PROC SORT 和 DATA 步骤保存此表中的观察数?我想将值保存在日志窗口中,就像 SAS 日志脚本中的“hold N=4”一样。
对不起我不专业的描述。提前致谢。
作为一个新的 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 的进步,您一定会开始使用它们。
nobs
在 set 语句中使用=。
data _null_;
set xyz nobs=nobs;
put "HOLD N=" nobs ;
stop;
run;
数据空;
设置 sashelp.vtable;
其中 libname="WORK" 和 memname="DS1";
调用 symput("count_obs",nlobs);
跑;
%put obs 在 ds1 是 :&count_obs;