Sas 自动获取未丢失的行数

Sas 自动获取未丢失的行数,sas,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

我有很多不同列(变量)名称的表,它们唯一常见的是名为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;
因此,我必须手动将每个表的计数(xxx)写入yyy部分


有没有一种方法可以编写某种通用查询,自动计算表中按一列分组的每一列(在我的例子中是日期)的非缺失行,并以类似于上面代码生成的形式显示它?

我正在确定哪些列包含缺失数据,因为这似乎是你主要关心的。我还假设你的变量是字符和数字的混合体,我的解决方案对两者都适用。 PROC FREQ中有一个NLEVELES选项,用于输出列中不同值的数量,任何缺少的值都会单独显示。下面是示例代码,如果要按日期对数据进行分组,则必须对表进行预排序,并在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;
;

我将继续确定哪些列包含丢失的数据,因为这似乎是您主要关心的。我还假设你的变量是字符和数字的混合体,我的解决方案对两者都适用。 PROC FREQ中有一个NLEVELES选项,用于输出列中不同值的数量,任何缺少的值都会单独显示。下面是示例代码,如果要按日期对数据进行分组,则必须对表进行预排序,并在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;
;

PROC TABLATE可以很容易地为您做到这一点,就像几个统计过程一样。我在这里是为
\u numeric\u
而做的,这使得我可以使用
var
而不是
class
,输出效果更好。如果您确实需要字符变量,您可以使用类来执行此操作,只需删除不感兴趣的行

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

PROC TABLATE可以很容易地为您做到这一点,就像几个统计过程一样。我在这里是为
\u numeric\u
而做的,这使得我可以使用
var
而不是
class
,输出效果更好。如果您确实需要字符变量,您可以使用类来执行此操作,只需删除不感兴趣的行

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

有没有不预先排序的解决方案?在这种情况下,sql更好,因为它只允许使用我拥有的,但缺点是我必须手动定义所有列名,而不是使用我的解决方案。您的数据是否未自动按日期排序?您还可以澄清变量是字符和数字的混合,还是只是数字是的,数据不是自动按日期排序的,数据集中有数字和字符变量。有没有不预先排序的解决方案?在这种情况下,sql更好,因为它只允许使用我拥有的,但缺点是我必须手动定义所有列名,而不是使用我的解决方案。您的数据是否未自动按日期排序?您还可以澄清变量是字符和数字的混合,还是仅仅是数字是的,数据不是自动按日期排序的,数据集中有数字和字符变量。这个解决方案相当不错,尽管添加按日期分组会使输出有点混乱。它能以某种方式被改变吗?因此,我们的想法不是显示每个变量的n nmiss,而是显示特定日期的观测总数(因为日期字段始终存在),并且每个变量只显示缺失量。这个解决方案相当不错,尽管添加按日期分组会使输出有点混乱。它能以某种方式被改变吗?因此,我们的想法不是显示每个变量的n nmiss,而是显示特定日期的观测总数(因为日期字段始终存在),并且每个变量只显示缺失量。并在一个表中得到结果。