SAS MERGE只返回一行

时间:2017-08-08 18:34:56

标签: 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_id。我在同一个宏中使用以下代码:

data work.mergedf;
    merge work.modeldata work.outdata;
    by u_id;
run;

但是,我新合并的数据集只包含一行(我有数千行),u_id = 1 - 该行确实正确合并。我已经浏览了SAS文档here,并且相信我已经正确地对数据集进行了排序 - 所有ID都按升序排序,并且在每个数据集中看起来都匹配。但是,日志文件返回相同的错误:

ERROR: BY variables are not properly sorted on data set WORK.MODELDATA.

我真的对造成这个问题的原因感到茫然。我曾尝试使用PROC SORT,但是日志文件是否有人对为什么只返回一行有任何见解?

编辑:感谢Joe的建议(看看已接受的答案),我能够做到这一点。这是我使用的最终代码产生了正确的合并:

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;

1 个答案:

答案 0 :(得分:1)

如果没有看到您的实际数据,就无法回答这个问题,但可以发布的内容是“当我认为我的数据集已经排序但SAS不同意时该怎么办”。

  1. 在两个数据集上运行PROC SORT。即使你认为它们已被分类。如果它们已经排序并且SAS已经知道它们,它甚至不会对它们进行排序,但否则这将按照SAS想要它们的方式使用它们。
  2. 如果您使用的是来自备用DBMS而非SAS的数据(因此来自SQL Server,Oracle,Hadoop等),请不要直接在该DBMS的数据上运行PROC SORT:将其作为一个数据库引入SAS SAS数据集,然后是PROC SORT该数据集。有时,其他DBMS会对如何处理您不一定需要的某些案例做出不同的选择。
  3. 确保两个数据集具有相同的变量长度。它很容易成为他们没有的问题。
  4. 确保你确实让BY变量正确,并且它有一些东西。我有空白BY变量的次数,或者我预期之外的东西的次数太高了,不能留下这个看似明显的细节。