我有2个SAS数据集,Lab
和Rslt
。它们都具有相同的变量,但是Rslt
应该具有Lab
的子集。对于我想做的事情,有4个重要的变量:visit
,accsnnum
,battrnam
和lbtestcd
。都是字符变量。我想比较Lab和Rslt这两个文件,以找出它们的差异-特别是,我需要知道每个唯一lbtestcd
的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计数,并且我需要一种方法来标记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;
感谢您能提供的所有帮助。这真的让我很烦!
我将对每个数据集进行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有很多选择;在这种情况下,最有帮助的可能是:
documentation列出所有选项。如果您的数据可能存在数值精度问题,则可能还需要查看METHOD
选项。