自动获取非缺失行数

时间:2014-01-27 07:50:10

标签: sas

我有很多具有不同列(变量)名称的表,唯一常见的是名为 Date 的列,所以我有很多数据,每个都有一定的日期。

要测试某些列是否有任何缺失值,我必须为每个表编写sql查询,如下所示:

proc sql;
  create table check as
    select Date, count(Date) as date_count, count(col_x) as col_x, count(col_y) as col_y, ..
    from certain_table
    group by Date;
quit;

所以我必须为每个表手动写 count(xxx)作为yyy 部分。

有没有办法编写某种通用查询,可以自动计算表中按一列(我的情况下为日期)分组的每列的非缺失行,并以类似于由上面的代码?

2 个答案:

答案 0 :(得分:4)

我正在寻找识别哪些列包含缺失数据的路线,因为这似乎是您主要关注的内容。我还假设你的变量是字符和数字的混合,我的解决方案将适用于两者。 PROC FREQ中有一个NLEVELS选项,用于输出列中不同值的数量,并且单独显示任何缺失值。下面是示例代码,如果您想按日期对数据进行分组,那么您必须预先分配表并在PROC FREQ中放置BY语句。

data class;
set sashelp.class;
if _n_=1 then call missing(name,height); /* set a couple of variables to missing in row 1 */
run;

ods select nlevels; /* only calculate the nlevels stats */
ods output nlevels=want; /* output results to a dataset */
proc freq data=class nlevels;
run;
;

答案 1 :(得分:1)

PROC TABULATE可以轻松地为您完成此操作,几个统计PROC也可以。我在_numeric_执行此操作,这允许我使用var而不是class,输出更好。如果确实需要字符变量,可以使用类来执行此操作,只删除不感兴趣的行。

proc tabulate data=sashelp.class out=want;
var _numeric_;
tables _numeric_,n nmiss;
run;