当前位置:  开发笔记 > 编程语言 > 正文

有没有办法检测何时到达SAS DATA步骤中的最后一次观察?

如何解决《有没有办法检测何时到达SASDATA步骤中的最后一次观察?》经验,为你挑选了4个好方法。

有没有办法检查运行时SAS数据集中有多少观察结果,或者检测到DATA步骤中何时到达最后一次观察?

对于这个看似简单的问题,我似乎无法在网上找到任何东西.谢谢!



1> Chang Chung..:

声明的nobs=选项set可以为您提供观察数量.编译数据步骤时,将扫描输入数据集的标题部分,因此您甚至不必执行set语句以获取观察数.例如,以下报告2如预期:

/* a test data set with two observations and no vars */
data two;
  output;
  output;
run;

data _null_;
  if 0 then set two nobs=nobs;
  put nobs=;
run;
/* on log
nobs=2
*/

读入end=最后一个观察(对于set语句)时,该选项设置一个标志.

但是,SAS数据集可以是SAS数据文件或SAS视图.在后者的情况下,在编译时或执行时可能不知道观察的数量.

data subclass/view=subclass;
  set sashelp.class;
  where sex = symget("sex");
run;

%let sex=F;
data girls;
  set subclass end=end nobs=nobs;
  put name= nobs= end=;
run;
/* on log
Name=Alice nobs=9.0071993E15 end=0
Name=Barbara nobs=9.0071993E15 end=0
Name=Carol nobs=9.0071993E15 end=0
Name=Jane nobs=9.0071993E15 end=0
Name=Janet nobs=9.0071993E15 end=0
Name=Joyce nobs=9.0071993E15 end=0
Name=Judy nobs=9.0071993E15 end=0
Name=Louise nobs=9.0071993E15 end=0
Name=Mary nobs=9.0071993E15 end=1
*/



2> cmjohns..:

您也可以使用,%sysfunc(attrn( dataset, nlobs))但它仅限于SAS数据集(即不是数据视图).相信宏观这篇SUGI论文,它也提供了有关良好宏观设计的重要信息.

您可以在SAS数据集上获得各种其他字符和数字信息.

请参阅attrn和attrc上的文档.

%macro numobs (data=&syslast ) ;
/* --------------------------------------------
Return number of obs as a function
--------------------------------------------
*/
%local dsid nobs rc;
%let data = &data ; /* force evaluation of &SYSLAST */
%let dsid=%sysfunc(open(&data));
%if &dsid > 0 %then
%do ;
   %let nobs=%sysfunc(attrn(&dsid,nlobs));
   %let rc=%sysfunc(close(&dsid));
%end ;
%else
   %let nobs = -1 ;
&nobs
%mend numobs;



3> Martin Bøgel..:

查找SAS数据集中的观察数量:

proc sql noprint;
  select count(*) into: nobs
  from sashelp.class
  ;
quit;

data _null_;
  put "&nobs";
run;

SQL部分计算observaions的数量,并将该数字存储在名为"nobs"的宏变量中.数据步骤显示数字,但您可以像使用其他任何宏变量一样使用.

处理最后一次观察时执行某项操作:

data _null_;
  set sashelp.class end=eof;
  if eof then do;
     put name= _n_=;
  end;
run;

"set"语句的"end"选项定义了一个变量(此处为文件结尾的"eof"),在处理最后一个观察时将其设置为1.然后,您可以测试变量的值,并在其值为1时执行操作.有关详细信息,请参阅"set"语句的文档.



4> 小智..:
data hold;   
  set input_data end=last;    
    .    
    .   
    .   
  if last then do;   
    .   
    .   
    .   
  end;  
run;

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有