【发布时间】:2016-08-11 18:39:47
【问题描述】:
我想使用 SAS Proc SQL 在表中找到我的行,其中每一列都有一个非缺失值。有没有办法做到这一点而不必列出所有的列名?这不起作用,但它可能会让您了解我的预期输出是什么。
Proc SQL;
Select *
from work.table
Where * is not null;
Run;
如果可能,我还想将结果限制为一项观察。谢谢。
【问题讨论】:
我想使用 SAS Proc SQL 在表中找到我的行,其中每一列都有一个非缺失值。有没有办法做到这一点而不必列出所有的列名?这不起作用,但它可能会让您了解我的预期输出是什么。
Proc SQL;
Select *
from work.table
Where * is not null;
Run;
如果可能,我还想将结果限制为一项观察。谢谢。
【问题讨论】:
在 SQL 中很重要,因为如果不使用宏语言,您无法在一项中获取所有变量。在数据步中,这是微不足道的。
data class;
set sashelp.class;
if mod(_n_,3)=1 then call missing(age);
run;
data want;
set class;
if cmiss(of _all_)=0;
run;
cmiss 如果缺少字符或数字变量,则表示 1(特别是在这种情况下计算缺失的总数)。您可以使用数据步骤上的obs=1 选项将其限制为一个。
【讨论】:
在 SQL 中,您必须是明确的。 * 不是扩展列的通用宏。它是一个语法元素,恰好在select * 和count(*) 中使用。
所以,是这样的:
Proc SQL;
Select *
from work.table
Where col1 is not null and col2 is not null and col3 is not null . . .
Run;
【讨论】:
使用 SQL 和字典表:
proc sql noprint;
select cats('not missing(', name, ')')
into :expression separated by " and "
from dictionary.columns
where libname = "SASHELP" and memname = "CLASS";
quit;
proc sql outobs=1;
select *
from sashelp.class
where &expression.;
quit;
【讨论】: