1

我有 2 个 SAS 数据集,Lab并且Rslt. 它们都具有所有相同的变量,但Rslt应该具有本质上是Lab. 对于我正在尝试做的事情,有 4 个重要变量:visitaccsnnumbattrnamlbtestcd. 都是字符变量。我想比较两个文件 Lab 和 Rslt 以找出它们的不同之处——具体来说,我需要知道lbtestcd每个 unique的计数accsnnum

但我必须控制几个因素。首先,我只需要比较battrnam变量中包含“Lipid Panel”或“Chemistry (6)”的观察结果。Rslt 文件只包含这些观察结果,所以我们不需要担心那个。所以我Lab使用这段代码进行了子集化:

data work.lab;
  set  livingston.ndb_lab_1;
  where battrnam contains "Lipid Panel" or battrnam = "Chemisty (6)";
run; 

这工作得很好。现在,我需要控制变量访问。我需要删除 Lab 和 Rslt 中包含“第 1 天”或“筛选”的访问的所有观察结果。我使用以下代码完成了此操作:

data work.lab;
set work.lab;
if visit = "Day 1" or visit = "Screening" then delete;
else visit = visit;
run;

data work.rslt;
set work.rslt;
if visit = "Day 1" or visit = "Screening" then delete;
else visit = visit;
run; 

现在这是我卡住的地方。我需要创建一种方法来比较两个单独文件 Lab 和 Rslt 之间的 accsnnum 的 lbtestcd 计数,并且我需要一种方法来标记在 Lab 和 Rslt 之间存在差异的 lbtestcd 计数的 accsnum。例如,如果 Lab 的 accsnum A1 具有 5 个唯一的 lbtestcd 值,而 Rslt 的 accsnum A1 具有 7 个唯一的 lbtestcd 值,我需要引起我的注意。

我可以为每个文件做一个 proc freq,但这些都是大型数据集,我不想手动比较。也许通过 accsnum 将 lbtestcd 的计数导出到 2 个文件 Lab 和 Rslt 中的每一个的新第三个数据集中的变量,然后创建一个变量,这是这两个文件的差异?这样如果差异!= 0 那么我可以获得这些 asscnum 的报告吗?SQL 中的建议也可以,因为我可以通过 SAS 运行它。

编辑 我已经使用了一些 SQL 通过 accsnum 使用下面的代码获取每个数据集的 lbtestcd 计数,但我仍然需要弄清楚如何将这些值导出到数据集以进行比较。

proc sql;
select accsnnum, count(lbtestcd)
from work.lab1
group by accsnnum;
quit;

proc sql;
select accsnnum, count(lbtestcd)
from work.rslt1
group by accsnnum;
quit;

感谢您提供的所有帮助。这个真的把我难住了!

4

1 回答 1

2

我会在每个数据集上做一个 PROC FREQ (或 proc 不管你喜欢做什么计数),然后使用 PROC COMPARE。例如:

proc freq data=rslt1;
tables accsnnum*ibtestcd/out=rsltcounts;
run;

proc freq data=lab1;
tables accsnnum*ibtestcd/out=labcounts;
run;

proc compare base=lab1 compare=rslt1 out=compares /* options */;
by accsnnum;
run;

PROC COMPARE 有很多选择;在这种情况下,最有帮助的可能是:

  • outnoequal - 仅输出两个数据集中不相同的每一行的行
  • outbase 和 outcomp - 为每个 BASE 和 COMPARE 数据集输出一行(如果 OUTNOEQUAL,则仅当它们不同时)
  • outdif - 输出“差异”行,即一个减去另一个;这可能对您有帮助,也可能对您没有帮助

文档列出了所有选项。METHOD如果您的数据可能存在数值精度问题,您可能还需要查看选项。

于 2013-07-12T14:40:10.190 回答