【发布时间】:2013-07-12 14:10:50
【问题描述】:
我有 2 个 SAS 数据集,Lab 和 Rslt。它们都具有所有相同的变量,但Rslt 应该具有本质上是Lab 的子集。对于我正在尝试做的事情,有 4 个重要变量:visit、accsnnum、battrnam 和 lbtestcd。都是字符变量。我想比较两个文件 Lab 和 Rslt 以找出它们的不同之处 - 具体来说,我需要知道每个唯一 accsnnum 的 lbtestcd 计数。
但我必须控制几个因素。首先,我只需要比较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 之间存在差异的 accsnum 计数lbtestcd。例如,如果 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;
感谢您提供的所有帮助。这个真的难倒我!
【问题讨论】:
-
您在第一个数据步骤中做了什么?这不是合法的 SAS 代码 - 您可以将其更改为您实际使用的代码,或者如果它不是 Livingston 图书馆中的 SAS,请告诉我们您使用的是什么 DBMS?
-
很抱歉——不小心剪错了代码。现在已经更正了。
-
在 SQL 中,您可以使用 CREATE TABLE 来制作包含查询结果的数据集。