现有多个数据集,表结构都是一样的,现在需要找出这些数据集有多少数据量是重复的。假设有4个数据集,找出这4个数据集的重复的量,这里统计重复的量包括两两重复的量,三个都重复的量,四个都重复的量。根据排列组合,两两重复的情况有
一、程序思路对4个数据集分别打标签,将重复的数据量通过merge归并到一个数据集,然后通过标签进行统计重复的量。
二、程序如下:
建立重复数据集;
data air1; set sashelp.air(firstobs=1* obs=150); run;
data air2; set sashelp.air(firstobs=10obs=100); run;
data air3; set sashelp.air(firstobs=50obs=120); run;
data air4; set sashelp.air(firstobs=30obs=60); run;
**proc ****sort **data=air1 out=air1_1 ; by_all_; run;
**proc ****sort **data=air2 out=air2_1 ; by_all_; run;
**proc ****sort **data=air3 out=air3_1 ; by_all_; run;
**proc ****sort data=air4 out=air4_1 ; by_all_; run;
/合并数据集,输出重复结果/
data air;
merge air1_1(in=a) air2_1(in=b) air3_1(in=c)
air4_1(in=d);
by all;
if a then flag_a=1;
if b then flag_b=2;
if c then flag_c=3;
if d then flag_d=4;
if a and b or a and c or a and d or b and c or b and d
or c and d then output; /输出6种情况/
run;
/上述程序可以更改为/
data air;
merge air1_1(in=a) air2_1(in=b) air3_1(in=c)
air4_1(in=d);
by all;
if a+b+c+d gt **1 then output; /输出6种情况/
run;
若输出两两重复,a+b+c+d=2;三个数据集重复的a+b+c+d=3;四个重复的a+b+c+d=4;直接使用临时变量a,b,c,d,临时变量不输出,因此若想输出临时变量值,需赋值给新变量。当数据量庞大,合并数据来源繁多,我们需要在合并后数据集追溯原始数据集来源,这时需要给原始数据来源打上标签,便于查询和管理数据。同时存在另一个问题,就是不同来源的数据集可能存在相同名称的变量,但是可能它们的值不同,我们有时更需要的是给每个变量名称打上数据集来源的标签。这个下集分享。
该部分结果如下,其实根据上面实验时所用的数据集均来自于sashelp.air,通过对生成的4个数据的观察,我们可以知道,这个4个数据集相同的数据量一共有11个,而且是从air数据集的第41到第51个,如有疑问,可留言咨询JJJ!
然后可以根据flag_a, flag_b, flag_c, flag_d的值来统计4个数据集重复的数据量。