2015-04-30 96 views
0

我有两个SAS数据集比较两个SAS数据集

的回答数据集

id A1 A2 A3 A4 
1 A B C D 
2 B B C A 
3 A A D D 

和一键数据集

A1 A2 A3 A4 
A B C D 

的问题是,如果在SAS的方式来循环槽第一个数据集中的观察值并将它们与第二个数据集中的唯一观测值进行比较。我对SAS很新,所以任何事情都会有所帮助。

回答

2

循环由数据步骤处理 - 它会自动完成。

为了得到一个单行附加到其他数据集的所有行很简单:

data want; 
    if _n_=1 then set have_onerow; 
    set have; 
run; 

,只有当变量名称不同,但工作 - 但会从have_onerow该行追加到的所有行有(因为SET的变量会自动保留)。

这不会为你做比较 - 你必须这样做。

但是,有一种方法可以使用它来生成proc compare数据集。只保留ID并执行上述操作:然后每个ID重复一次密钥。然后proc compare会为你做这个 - 看the documentation获得更多的信息,哪些选项给你输出数据集的正确信息。

data have; 
input id A1 $ A2 $ A3 $ A4 $ ; 
datalines; 
1 A B C D 
2 B B C A 
3 A A D D 
;;;; 
run; 

data key; 
input a1 $ a2 $ a3 $ a4 $; 
datalines; 
A B C D 
;;;; 
run; 

data key_allrows; 
    if _n_=1 then set key; 
    set have (keep=id); 
run; 

proc compare base=key_allrows compare=have out=compare; 
    by id; 
run; 
+0

谢谢!但是,我可以使用这种比较的结果来形成一个新的数据集吗?例如:如果id不等式的数量超过2,则将该观察值置入数据集“失败” – Creon12

+0

是的。看看文档;它涵盖了很多不同的选项。上面应该产生第三个'比较'数据集,如果它们是相同的或'X .......',如果它们不是(因为它们是8性格就像我懒洋洋地输入它们一样)。你有很多选项可以控制这个。如果你有一些特定于proc比较的东西,一旦你尝试过,如果它与这个问题有很大的不同,那么你可以随意问另一个问题! – Joe

+0

谢谢你的帮助! – Creon12

1
proc sort data=a; by a1 a2 a3 a4; run; 
proc sort data=b; by a1 a2 a3 a4; run; 

data c; 
    merge a(in=ina) b(in=inb) 
    by a1 a2 a3 a4; 
    if inb then b='Ý'; 
run; 

它创建数据集与指标B = 'Y' 为匹配一个