比较两个sas数据集

时间:2015-04-30 20:07:00

标签: sas

我有两个sas数据集

答案数据集

$(document).ready(function(){

        var nav = $('.topmenu');
        var top = $(".topmenu").height();

        $(window).scroll(function () {
            if ($(window).scrollTop() > top ) {
                nav.addClass("sticky");
            } else {
                nav.removeClass("sticky");
            }
        });

    });

关键数据集

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

问题是SAS是否有办法循环通过第一个数据集中的观察结果,并将它们与第二个数据集中的唯一观察结果进行比较。我对SAS很陌生,所以一切都会有所帮助

2 个答案:

答案 0 :(得分:2)

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

要将一行附加到另一个数据集中的所有行,这非常简单:

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

只有在变量名称不同的情况下才有效 - 但是这会将has_onerow中的行追加到所有的has行(因为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;

答案 1 :(得分: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;

它为匹配的

创建数据集a,其中指标b ='Ý'