我想在SAS中合并两个数据库。我有一个任务使用MERGE语句,虽然我更喜欢使用SQL。不过这是我使用的代码:
DATA grades;
INPUT Name $ grades;
DATALINES;
Alice 5
Carol 1
John 5
Robert 5
Thomas 3
Judy 6
;
PROC SORT DATA=grades;
BY Name;
RUN;
PROC PRINT DATA=SASHELP.class;
PROC PRINT DATA=grades;
DATA merged;
MERGE SASHELP.class grades;
BY Name;
RUN;
PROC PRINT DATA=merged;
我获得的最终结果是:
Obs Name Sex Age Height Weight grades
1 Alice . . . 5
2 Carol . . . 1
3 John . . . 5
4 Judy . . . 6
5 Robert . . . 5
6 Thomas . . . 3
7 Alfred M 14 69.0 112.5 .
8 Alice F 13 56.5 84.0 .
9 Barbara F 13 65.3 98.0 .
10 Carol F 14 62.8 102.5 .
11 Henry M 14 63.5 102.5 .
12 James M 12 57.3 83.0 .
13 Jane F 12 59.8 84.5 .
14 Janet F 15 62.5 112.5 .
15 Jeffrey M 13 62.5 84.0 .
16 John M 12 59.0 99.5 .
17 Joyce F 11 51.3 50.5 .
18 Judy F 14 64.3 90.0 .
19 Louise F 12 56.3 77.0 .
20 Mary F 15 66.5 112.0 .
21 Philip M 16 72.0 150.0 .
22 Robert M 12 64.8 128.0 .
23 Ronald M 15 67.0 133.0 .
24 Thomas M 11 57.5 85.0 .
25 William M 15 66.5 112.0 .
如果我通过删除Merge语句中的“BY Name”来修改代码,那么结果并不是更好:
Obs Name Sex Age Height Weight grades
1 Alice M 14 69.0 112.5 5
2 Carol F 13 56.5 84.0 1
3 John F 13 65.3 98.0 5
4 Judy F 14 62.8 102.5 6
5 Robert M 14 63.5 102.5 5
6 Thomas M 12 57.3 83.0 3
7 Jane F 12 59.8 84.5 .
8 Janet F 15 62.5 112.5 .
9 Jeffrey M 13 62.5 84.0 .
10 John M 12 59.0 99.5 .
11 Joyce F 11 51.3 50.5 .
12 Judy F 14 64.3 90.0 .
13 Louise F 12 56.3 77.0 .
14 Mary F 15 66.5 112.0 .
15 Philip M 16 72.0 150.0 .
16 Robert M 12 64.8 128.0 .
17 Ronald M 15 67.0 133.0 .
18 Thomas M 11 57.5 85.0 .
19 William M 15 66.5 112.0 .
看起来要工作,直到你查看Robert的数据为例。结果应该是:
Name Sex Age Height Weight Grade
Robert M 12 64.8 128.0 5
不
Name Sex Age Height Weight Grade
Robert M 14 63.5 102.5 5
看来阿尔弗雷德被覆盖了。为什么数据不一致?我做错了什么?
答案 0 :(得分:3)
这似乎是一个数据问题,其中成绩表中的名称具有一个或多个前导空格。 HTML和PDF的默认输出样式不会使前导空格可见。 rect.setOnMouseClicked(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent me){
Main.editGrid ((int) rect.getX()/gridSize, (int) rect.getY()/gridSize, true);
}
});
并查看ODS LISTING
窗口中的输出应显示前导空格。
你可以修复&#39; OUTPUT
步骤中name = left(name);
的问题。您可以使用grades
强制解决问题。使用&#39; $ HEX&#39;检查基础字符数据格式。
name = ' ' || left(name);
没有PROC REPORT data=grades;
columns name grades name=namehex;
define namehex / format=$hex20.;
run;
的合并是一种特殊的边缘情况;通常当您知道表A中的先验未键控数据与表B中的数据按行1:1相关时。