SAS编程 - 删除重复项

时间:2018-05-08 09:31:28

标签: sas base sas-macro

我根据城市之间的距离得到以下数据。

Source Destination Distance 
USA       UK        1000 
USA      Spain      200 
UK        USA       1000 
Germany  Spain      500 
Spain     USA       200 

我想删除源和目标相同的重复项。例如美国英国英国美国相同,因此需要删除重复值。

以下是所需的输出。

Source Destination Distance 
USA        UK        1000 
USA      Spain       200 
Germany  Spain       500 

2 个答案:

答案 0 :(得分:1)

首先通过调用sortc生成一个虚拟变量来保存已排序的源和目标,然后按虚拟变量排序。

data have;
input Source $ Destination $ Distance;
cards;
USA       UK        1000 
USA      Spain      200 
UK        USA       1000 
Germany  Spain      500 
Spain     USA       200 
;

data temp;
    set have;
    length dummy $50.;
    _var1=source; _var2=destination;
    call sortc (of _:);
    dummy=catx(' ',of _:);
    drop _:;
run;

proc sort data=temp out=want(drop=dummy) nodupkey;
by dummy;
run;

答案 1 :(得分:0)

您必须为所需的所有路径创建一个维度/查找表,然后查找这些值以标准化您想要的输出。

我创建了一个名为Routes的查找表,以及包含要查找的所有对值的变量。

完整代码:

data have;
input Source $ Destination $ Distance ;
datalines;
USA       UK        1000
USA      Spain      200
UK        USA       1000
Germany  Spain      500
Spain     USA       200
;
run;
data routes;
infile datalines dsd dlm=',';
length pairs $50.;
input Source $ Destination $ Distance Pairs $ ;
datalines;
USA,UK,1000,USA-UK/UK-USA
USA,Spain,200,USA-Spain/Spain-USA
Germany, Spain,500,Germany-Spain/Spain-Germany
;
run;

proc sql;
create table want as
     Select distinct 
     t2.Source, t2.Destination,  t2.Distance
     from have  t1 inner join routes t2 on
      t2.Pairs contains catx('-',t1.Source,t1.Destination) or 
      t2.Pairs contains catx('-',t1.Destination,t1.Source)
;
quit;

输出:

 Source=Germany Destination=Spain Distance=500 
 Source=USA Destination=Spain Distance=200 
 Source=USA Destination=UK Distance=1000