比较两个sas数据集

比较两个sas数据集,sas,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的新手,所以任何有帮助的事情都是由数据步骤处理的,它会自动完成 将一行附加到另一个数据集中的所有行非常简单: data want; if _n_=1 th

我有两个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的新手,所以任何有帮助的事情都是由数据步骤处理的,它会自动完成

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

data want;
  if _n_=1 then set have_onerow;
  set have;
run;
这只在变量名不同的情况下起作用,但这会将have_onerow中的行附加到have的所有行(因为SET中的变量会自动保留)

这不能为你做比较——你必须这样做

但是,有一种方法可以使用它生成
proc compare
数据集。仅保留ID并执行上述操作:然后每个ID重复一次键。然后
proc compare
将为您执行此操作-查看以获取有关哪些选项在输出数据集中为您提供了正确信息的更多信息

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;

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

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

data want;
  if _n_=1 then set have_onerow;
  set have;
run;
这只在变量名不同的情况下起作用,但这会将have_onerow中的行附加到have的所有行(因为SET中的变量会自动保留)

这不能为你做比较——你必须这样做

但是,有一种方法可以使用它生成
proc compare
数据集。仅保留ID并执行上述操作:然后每个ID重复一次键。然后
proc compare
将为您执行此操作-查看以获取有关哪些选项在输出数据集中为您提供了正确信息的更多信息

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;

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

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

data want;
  if _n_=1 then set have_onerow;
  set have;
run;
这只在变量名不同的情况下起作用,但这会将have_onerow中的行附加到have的所有行(因为SET中的变量会自动保留)

这不能为你做比较——你必须这样做

但是,有一种方法可以使用它生成
proc compare
数据集。仅保留ID并执行上述操作:然后每个ID重复一次键。然后
proc compare
将为您执行此操作-查看以获取有关哪些选项在输出数据集中为您提供了正确信息的更多信息

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;

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

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

data want;
  if _n_=1 then set have_onerow;
  set have;
run;
这只在变量名不同的情况下起作用,但这会将have_onerow中的行附加到have的所有行(因为SET中的变量会自动保留)

这不能为你做比较——你必须这样做

但是,有一种方法可以使用它生成
proc compare
数据集。仅保留ID并执行上述操作:然后每个ID重复一次键。然后
proc compare
将为您执行此操作-查看以获取有关哪些选项在输出数据集中为您提供了正确信息的更多信息

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;
它为匹配的数据集创建了一个数据集a,其中的指示符b为“Ý”

它为匹配的数据集创建了一个数据集a,其中的指示符b为“Ý”

它为匹配的数据集创建了一个数据集a,其中的指示符b为“Ý”


它为匹配的数据集创建了一个数据集a,其中指标b为“Ý”

谢谢!但是我可以使用这个比较的结果来形成一个新的数据集吗?例如:如果id的不等式数量超过2,则将此观察结果放入数据集“failure”Yep。查看文档;它涵盖了许多不同的选择。上面应该会生成第三个“比较”数据集,如果它们相同,则只有“…..”,如果它们不相同,则只有“X…”(因为它们的长度与我懒散输入它们的长度相同,只有8个字符)。你有很多选择来控制它。如果您尝试过这个方法后,有一些特定的东西需要进行proc比较,请随意问另一个问题,如果它与这个问题有足够的不同!谢谢你的帮助!非常感谢。但是我可以使用这个比较的结果来形成一个新的数据集吗?例如:如果id的不等式数量超过2,则将此观察结果放入数据集“failure”Yep。查看文档;它涵盖了许多不同的选择。上面应该会生成第三个“比较”数据集,如果它们相同,则只有“…..”,如果它们不相同,则只有“X…”(因为它们的长度与我懒散输入它们的长度相同,只有8个字符)。你有很多选择来控制它。如果您尝试过这个方法后,有一些特定的东西需要进行proc比较,请随意问另一个问题,如果它与这个问题有足够的不同!谢谢你的帮助!非常感谢。但是我可以使用这个比较的结果来形成一个新的数据集吗?例如:如果id的不等式数量超过2,则将此观察结果放入数据集“failure”Yep。查看文档;它涵盖了许多不同的选择。上面应该会生成第三个“比较”数据集,如果它们相同,则只有“…..”,如果它们不相同,则只有“X…”(因为它们的长度与我懒散输入它们的长度相同,只有8个字符)。你有很多选择来控制它。如果您尝试过这个方法后,有一些特定的东西需要进行proc比较,请随意问另一个问题,如果它与这个问题有足够的不同!谢谢你的帮助!非常感谢。但是我可以使用这个比较的结果来形成一个新的数据集吗?例如:如果id的不等式数量超过2,则将此观察结果放入数据集“failure”Yep。查看文档;它涵盖了许多不同的选择。上面应该生成第三个“比较”数据集,如果它们相同,则只有“…..”数据集,如果它们不相同,则只有“X…”(因为它们是8个字符的lo)