需要比较两个变量,每个变量都来自单独的数据集,并且带有标志差异

问题描述 投票:1回答:1

我有2个SAS数据集,LabRslt。它们都具有相同的变量,但是Rslt应该具有Lab的子集。对于我想做的事情,有4个重要的变量:visitaccsnnumbattrnamlbtestcd。都是字符变量。我想比较Lab和Rslt这两个文件,以找出它们的差异-特别是,我需要知道每个唯一lbtestcdaccsnnum计数。

但是我必须控制一些因素。首先,我只需要比较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计数,并且我需要一种方法来标记acctestnum,其中lbtestcd的计数在Lab和Rslt之间存在差异。例如,如果Lab的accsnum A1具有5个唯一的lbtestcd值,而Rslt的accsnum A1具有7个唯一的lbtestcd值,则需要引起我的注意。

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

编辑我已经使用一些SQL使用下面的代码来获取每个数据集的acctestnum的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;

感谢您能提供的所有帮助。这真的让我很烦!

sql substring sas subset
1个回答
2
投票

我将对每个数据集进行PROC FREQ(或处理任何您喜欢的计数),然后使用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有很多选择;在这种情况下,最有帮助的可能是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.