我有很多具有不同列(变量)名称的表,它们唯一常见的是名为 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部件。
是否有一种方法可以编写某种通用查询,可以自动计算按一列分组的表中的每一列的不缺失行(在我的情况下是日期),并以类似于上面代码生成的形式显示它?
发布于 2014-01-27 10:45:42
我将沿着确定哪些列包含缺失数据的路线前进,因为这似乎是您主要关注的问题。我还假设您的变量是字符和数字的混合体,我的解决方案对两者都适用。PROC中有一个NLEVELS选项,它输出列中不同值的数量,任何缺失的值都分别显示。下面是示例代码,如果您想按日期对数据进行分组,那么您必须预置表并在PROC中放置一个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;
;发布于 2014-01-27 19:19:20
PROC表可以很容易地为您做到这一点,就像一些统计过程一样。我这样做是为了_numeric_,它允许我使用var而不是class,这是更好的输出。如果您确实需要字符变量,您可以使用类来完成这一任务,只需删除那些无趣的行。
proc tabulate data=sashelp.class out=want;
var _numeric_;
tables _numeric_,n nmiss;
run;https://stackoverflow.com/questions/21375487
复制相似问题