如果我运行的查询产生的行数为零,那么我仍然希望创建一个SAS数据集,其中一行包含所有分配有缺失值的列。

我找到了使用单独的数据步骤执行此操作的方法:

%let dsid   = %sysfunc (open(myfile));
%let anyobs = %sysfunc (attrn(&dsid,ANY));
%let dsid   = %sysfunc (close(&dsid));
data _null_;
  if &anyobs=0 then do;
     call execute('data work.myfile; call missing(col1, col2, col3); run;');
end;

这工作正常,但我想知道是否有一种方法可以为proc sql中的每一列分配缺失?

谢谢

最佳答案

因此,假设您执行以下命令:

proc sql;
  create table class as
    select * from sashelp.class
    where age=19;
quit;

然后,您可以这样做:
%macro ifMissingRow(data=);
  %let dsid   = %sysfunc (open(&data.));
  %let anyobs = %sysfunc (attrn(&dsid,ANY));
  %let dsid   = %sysfunc (close(&dsid));
  %if &anyobs=0 %then %do;
    data &data.;
      output;
      set &data.;
    run;
  %end;
%mend ifmissingRow;

%ifMissingRow(data=class);

为了使SET在SET停止数据行之前将行设置为0行(指针为h / t Tom),必须先设置输出。

关于sas - 对缺失值进行Proc SQL分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43213002/

10-11 04:59