如果我运行的查询产生的行数为零,那么我仍然希望创建一个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/