SAS合并只返回一行

SAS合并只返回一行,sas,Sas,在SAS中,我运行了一个简单的线性回归,并使用以下代码将结果输出到work.outdata(列包括残差、预测、标准误差): proc reg data=model_file; model &y = &x; output out=work.outdata r=resid; title 'model'; run; quit; 我正在尝试将此输出数据连接回原始数据集,称为work.modeldata。我想加入的ID是u\u ID。我在同一宏中使用以下代码执行此操作: data wor

在SAS中,我运行了一个简单的线性回归,并使用以下代码将结果输出到work.outdata(列包括残差、预测、标准误差):

proc reg data=model_file;
model &y = &x;
output out=work.outdata r=resid;
title 'model';
run; quit;
我正在尝试将此输出数据连接回原始数据集,称为
work.modeldata
。我想加入的ID是
u\u ID
。我在同一宏中使用以下代码执行此操作:

data work.mergedf;
    merge work.modeldata work.outdata;
    by u_id;
run;
但是,我新合并的数据集只包含一行(我有数千行),并且
u\u id=1
——但该行确实正确合并了。我已经浏览了SAS文档,并且相信我已经正确地对数据集进行了排序——所有ID都是按升序排序的,并且在每个数据集中似乎都是匹配的。但是,日志文件返回相同的错误:

错误:按变量在数据集WORK.MODELDATA上没有正确排序。

我真的不知道是什么导致了这个问题。我尝试过使用
PROC SORT
,但是日志文件中是否有人知道为什么只返回一行

编辑:多亏了乔的建议(看看公认的答案),我才能够让这个工作顺利进行。下面是我使用的最终代码,它生成了正确的合并:

proc sort data=work.model_file; by u_id; run;
proc sort data=work.outdata; by u_id; run; 

data work.merged_data;
    merge work.model_file work.outdata;
    by u_id;
run;

在没有看到实际数据的情况下回答这个问题是不可能的,但可以发布的是“当我认为我的数据集已排序但SAS不同意时,该怎么办”的步骤

  • 在两个数据集上运行PROC SORT。即使你认为他们已经分类了。如果它们已被排序,而SAS已经知道它们是,它甚至不会对它们进行排序,但否则,这将按照SAS希望的方式使用它们
  • 如果您使用的数据来自SAS以外的备用DBMS(因此来自SQL Server、Oracle、Hadoop等),请不要直接对该DBMS的数据运行
    PROC SORT
    :将其作为SAS数据集引入SAS,然后
    PROC SORT
    该数据集。有时,其他DBMS会做出不同的选择,以处理您不一定需要的某些情况
  • 确保两个数据集具有相同的变量长度。这很容易成为一个问题,但他们没有
  • 确保BY变量实际上是正确的,并且其中包含一些内容。我用变量或非我预期的东西来表示空白的次数太多了,无法忽略这个看似显而易见的细节

  • 模型数据来自哪里?您的PROC REG只引用了MODEL_文件和OUTDATA。@data_null_它是相同的。我刚刚重命名了它,在发布到SO时忘记更改变量名。什么变量是
    U\U ID
    ,为什么您认为代码中提到的三个数据集中的任何一个都会按该变量排序?@Tom
    U\U ID
    是表的主键,我相信它是按这个变量排序的,因为所有的表当前都列出了带有
    U\U ID
    升序的行。我检查了每个表的前50行,它们都与
    U ID
    s匹配。
    modeldata
    表最初存储为SAS数据集还是来自其他DBMS?换句话说,
    work.modeldata
    是从第三方数据库对表执行排序操作的结果吗?这些都是很好的建议。数据根本无法发布,不幸的是,我知道它在调试方面有点限制。我最终还是让它工作了,它包括正确地对两个数据集进行排序。我对我的问题进行了编辑,以反映出有什么帮助!