我是SAS的新手。现在,我有一个SAS数据表如下:
ID score
-------------------
01 1
02 3
03 4
04 2
有没有办法在此表中仅使用PROC SORT和DATA步骤保存观察数量?我想在日志窗口中保存该值,就像在SAS日志脚本中“保持N = 4”一样。
对不起我的不专业描述感到抱歉。提前谢谢。
答案 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;