我有 2 个 SAS 数据集,Lab
并且Rslt
. 它们都具有所有相同的变量,但Rslt
应该具有本质上是Lab
. 对于我正在尝试做的事情,有 4 个重要变量:visit
、accsnnum
、battrnam
和lbtestcd
. 都是字符变量。我想比较两个文件 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;
感谢您提供的所有帮助。这个真的把我难住了!