比较SAS中两个不同数据集中的变量

比较SAS中两个不同数据集中的变量,sas,Sas,我需要比较两个不同数据集中的两个变量,它们有不同的变量名称,然后我需要在SASYES中写入观察值,如果记录匹配,否则将其写入SASNO 我正在从DB2检索记录并重命名变量 我的sas代码 DATA _NULL_; SET WORKLIST; SET UNITFUNC; IF PRIMNUM=CORRPMNM AND MODELCD=MCMODEL THEN DO; FILE SASYES; PUT @01 ANSFACT1 $CHAR7.

我需要比较两个不同数据集中的两个变量,它们有不同的变量名称,然后我需要在SASYES中写入观察值,如果记录匹配,否则将其写入SASNO

我正在从DB2检索记录并重命名变量

我的sas代码

DATA _NULL_;
   SET WORKLIST;
   SET UNITFUNC;
   IF PRIMNUM=CORRPMNM AND MODELCD=MCMODEL THEN DO; 
      FILE SASYES; 
      PUT @01  ANSFACT1 $CHAR7. 
          @09  CORRPMNM $CHAR12.
          @21  MCMODEL  $CHAR8. 
      OUTPUT SASYES; 
   END; 
   ELSE DO; 
      FILE SASNO; 
      PUT  @01  ANSFACT1 $CHAR7. 
           @09  CORRPMNM $CHAR12. 
           @21  MCMODEL  $CHAR8. 
      OUTPUT SASNO;
   END;
RUN;  
当我提交代码时,所有的观察结果都会写入
SASNO
,即使它们在两个数据集中都很少匹配。请帮帮我

注意:我还使用了
MERGE
从两个表中读取数据,结果是相同的


有人能帮忙吗

SET一次只取一行,从不跨数据集进行比较。就像拿一堆牌,把它放在另一张牌的上面,然后一次拿一张牌

MERGE合并了两个数据集,因此您可以将两堆卡片并排放置,同时查看每一堆卡片的顶部。这就是你想要做的:合并它们

data compare;
  merge ds1 ds2;
  by commonID;
run;
您可能希望通过ID变量合并
,或者您可能希望在不使用
by语句的情况下合并,以便只比较每个数据集的第一条记录和每个数据集的第二条记录,等等

data compare;
  merge ds1 ds2;
run;

您可以在该数据步骤中添加代码以进一步限制输出内容,或者您可以合并到一个数据集中,然后直观地查看它,然后再创建其他代码。

如果您可以从
工作列表
UNITFUNC
创建小数据集,这会有所帮助,这至少包括一个例子,说明它什么时候能像你期望的那样工作,至少有一个例子说明它在什么地方不能工作。这个问题涉及到同样的问题,但有一些改动:看看这是否也适合你。是的。但我必须检查三个变量的条件。如果所有三个变量只匹配,则必须写入文件;你看,这就是它变得复杂的地方。你只是在比较代码中的两个变量。但尽管如此,通过扩展我指出的答案中的连接,您应该能够获得期望的结果。如果你在你拥有的和你想要的东西上添加一些示例数据集,那么很可能也很容易显示实际的代码。谢谢。它现在正在工作。但我只会得到真实的数据。如何获取没有匹配记录的记录。我是否应该尝试相同的查询,但是否可以使用“notequals”而不是“equals”?我不能使用merge,因为记录的顺序可能相同,也可能不同。它们分散在数据集中。我的问题是如何比较这些分散的记录,它们不符合顺序。那么你在问题中没有充分描述你的问题。您必须使用merge、sqljoin或类似的方法:但是您必须能够声明有效组合的条件。您正在尝试在
PRIMNUM=CORRPMNM和MODELCD=MCMODEL
上合并它们吗?很抱歉。不。如果我使用merge,我使用的是两个数据集共用的FACTRY_CD。那么我看不出合并不是您想要的。您可能需要提供数据(之前和之后)以获得所需的内容。