我有一个包含250个变量的数据集。我认为有些行可能是完全重复的。如果我只有3个变量,我可以运行此代码来检查dupes:
HEAD
但是,对于250个变量,我不想输入proc sql;
create table checkDupe as
select count(*) as N, *
from bigTable
group by 1, 2, 3
having N > 1;
quit;
。
以下group by 1, 2, 3, ... , 250
语句不起作用:
group by
是否有一种简洁的方法可以按所有变量进行分组?
答案 0 :(得分:2)
尝试为数据集的列名生成宏变量,然后在sql中分组;
proc sql;
select name into: name separate ',' from dictionary.columns where libname='SASHELP' and memname='CLASS';
quit;
proc sql;
select count(*) as N,* from sashelp.class group by &name;
quit;
如果只是想知道数据集中是否有完整的重复项,请尝试以下方法:
proc sort data=sashelp.class out=want nodup;
by _all_;
run;
答案 1 :(得分:1)
检查重复项的示例代码将返回一个数据集,该数据集包含密钥不唯一的所有记录。所以下面返回四条记录:
data bigtable;
input a b c d;
datalines;
1 1 1 1
1 1 1 1
1 2 1 1
1 2 2 1
1 2 2 2
;
run;
proc sql;
create table checkDupe1 as
select *,count(*) as N
from bigTable
group by 1, 2, 3
having N > 1;
quit;
假设您不需要N
列,那么在SAS中获取所有非唯一行数据集的最简单方法是使用PROC SORT
选项NOUNIQUEKEY
。所以下面将返回相同的四个记录:
proc sort data=bigtable out=checkDupe2 nouniquekey ;
by a b c ;
run ;
BY
语句可以是BY _ALL_
,它将返回所有变量上重复的两条记录:
proc sort data=bigtable out=checkDupe3 nouniquekey ;
by _all_ ;
run ;
答案 2 :(得分:0)