【问题标题】:Compare a variable in two different data-sets in SAS比较 SAS 中两个不同数据集中的变量
【发布时间】:2016-07-15 16:43:12
【问题描述】:

我需要比较两个不同数据集中的两个变量,这些变量具有不同的变量名称,然后如果记录匹配,我需要在 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 也从两个表中读取数据,结果是相同的。

谁能帮忙?

【问题讨论】:

  • 如果您可以从WORKLISTUNITFUNC 创建小型数据集,这将有所帮助,其中至少包括一个示例,说明它何时按预期工作,至少一个示例说明它不按预期工作。
  • 这个问题涵盖了同样的问题,但有一些改动:stackoverflow.com/questions/29273568/… 看看这是否也适合你。
  • 是的。但我必须检查三个变量的条件。如果所有三个变量都匹配,那么它必须写入文件;你看这就是它变得复杂的地方。
  • 您只是在比较代码中的两个变量。但是,通过扩展我指出的答案中的连接,您应该能够获得所需的结果。如果你添加一些关于你拥有什么和想要什么的示例数据集,那么显示实际代码可能也很容易。
  • 谢谢。它现在正在工作。但我只会得到真实的数据。我将如何获得没有匹配记录的记录。我应该尝试相同的查询,而不是“equals”,我可以使用“notequals”吗?

标签: sas


【解决方案1】:

SET 一次取一行,从不跨数据集进行比较。就像拿一叠纸牌放在另一叠纸牌上,然后一次拿一张纸牌。

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

data compare;
  merge ds1 ds2;
  by commonID;
run;

您可能想要合并 by 一个 ID 变量,或者您可能想要在不使用 by 语句的情况下合并以仅比较每个数据集中的第一条记录、每个数据集中的第二条记录,等等。

data compare;
  merge ds1 ds2;
run;

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

【讨论】:

  • 我不能使用合并,因为记录的顺序可能相同,也可能不同。它们分散在整个数据集中。我如何比较这些分散的记录是我的问题,它们不按顺序排列。
  • 那你在问题中没有充分描述你的问题。您必须使用合并、sql 连接或类似的方法:但您必须能够说明您拥有有效组合的条件。您是否要在PRIMNUM=CORRPMNM AND MODELCD=MCMODEL 上合并它们?
  • 很抱歉。没有。如果我使用合并,我将使用这两个数据集共有的 FACTRY_CD。
  • 那么我看不出合并不是您想要的。您可能需要提供数据(之前和之后)以获得您想要的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多