【发布时间】:2017-08-08 18:34:55
【问题描述】:
在 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,但是日志文件有没有人知道为什么只返回一行?
编辑:感谢乔的建议(查看已接受的答案),我得以完成这项工作。这是我使用的产生正确合并的最终代码:
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;
【问题讨论】:
-
MODELDATA 来自哪里?您的 PROC REG 仅引用了 MODEL_FILE 和 OUTDATA。
-
@data_null_ 是一样的。我只是重命名它并忘记在发布到 SO 时更改变量名称。
-
U_ID是什么变量,为什么您认为代码中提到的三个数据集中的任何一个都会按该变量排序? -
@Tom
U_ID是表的主键,我相信它是按该变量排序的,因为所有表当前都列出了U_ID升序的行。我检查了每个表的前 50 行,它们都匹配U_IDs。 -
modeldata表最初是存储为 SAS 数据集还是来自其他一些 DBMS?换句话说,work.modeldata是对第三方数据库中的表执行排序操作的结果吗?
标签: sas