SAS被命令导致观察缺失
我自己在学习SAS,但在指挥方面遇到了问题 样本数据: 原始代码很好:SAS被命令导致观察缺失,sas,Sas,我自己在学习SAS,但在指挥方面遇到了问题 样本数据: 原始代码很好: proc print data = sashelp.class; var name sex age height weight; where age > 14; sum weight; run; 但当我添加一个by命令时: proc print data = sashelp.class; var name sex age height weight; where age &g
proc print data = sashelp.class;
var name sex age height weight;
where age > 14;
sum weight;
run;
但当我添加一个by命令时:
proc print data = sashelp.class;
var name sex age height weight;
where age > 14;
sum weight;
by age;
run;
产出如下所示:
奇怪的是,第17条和第19条的观察结果都不见了。你能告诉我为什么以及如何解决这个问题吗?谢谢。如果查看日志,您会发现错误:
ERROR: Data set SASHELP.CLASS is not sorted in ascending sequence. The current BY group has Age = 16 and the next BY group has Age = 15.
使用时,必须按变量by
对数据进行排序或索引
在处理数据时,SAS希望数据已按顺序排列,或具有保存顺序的索引
前三个观测值的顺序是正确的,从15上升到16。一旦到达第4个观察值,它会看到“按组”值为15。然后它将出错,停止处理,如果是PROC PRINT
,则打印出错前获得的结果。您可以通过排序sashelp.class
来解决此问题:
proc sort data=sashelp.class
out=class;
by age;
run;
proc print data = class;
var name sex age height weight;
where age > 14;
sum weight;
by age;
run;
SAS程序通常不会按组自动排序。它们在使用之前必须进行排序或索引。只需在
by
语句中添加notsorted
关键字;这将处理未排序的数据,而不必在前面加上proc sort
语句
proc print data = sashelp.class ;
var name sex age height weight;
where age > 14;
sum weight;
by age notsorted;
run;
notsorted
BY选项不会对数据进行排序。NOTSORTED根据具有相同by值组合的传入连续行创建组。where子句删除<15行,因此未排序的组是Age=15(两行)、Age=16(一行)和Age=15(两行)。谢谢您的帮助,明白了。明白了,非常感谢您的帮助和解释。