楊中 发表于 2013-4-2 14:47 
Y大,这次的想法我知道,不过又卡住了一个问题,
假使每笔 settmon都一样,我把B1的数据重新修改如下:
...
觉得你可能不想要两个不同的settmon值出现在同一行。那么你需要把 settmon 放在 by 语句中。但是你不可能再有两个 settmon 变量。 同时不再需要id变量。
试试这个.
Try this one, it is much simplier than before.
proc sort data=s0 out=s0_sort; /* sort s0 by acno key and settmon */
by acno key settmon;
run;
proc sort data=b1 out =b1_sort; /* sort b1 by acno key and settmon */
by acno key settmon;
run;
data s0b1_merge; /* merge the s0_sort and b1_sort */
merge s0_sort b1_sort (rename = (date = date1 bs=bs1 os=os1
deal = deal1 price=price1 deal_qty = deal_qty1));
by acno key settmon;
run;
proc print data=s0b1_merge; title 's0b1_merge'; run;
下面是结果
deal_
Obs acno date key settmon deal bs os price deal_qty date1 deal1 bs1 os1 price1 qty1
1 1 20000317 a 200004 1129 S 0 8680.0 5 . . . .
2 1 20000317 a 200004 1129 S 0 8680.0 5 . . . .
3 1 20000317 a 200004 1129 S 0 8680.0 5 . . . .
4 1 a 200006 . . . . 20000327 1132 B 1 9853 2
5 1 a 200006 . . . . 20000327 1132 B 1 9853 2
6 1 a 200006 . . . . 20000327 1137 B 1 9852 2
7 1 a 200006 . . . . 20000327 1137 B 1 9852 2
8 1 20000317 a 200504 1131 S 0 8680.0 1 . . . .
9 1 20000317 a 200504 1131 S 0 8680.0 1 . . . .
10 1 20000317 a 200504 1131 S 0 8680.0 1 . . . .
11 2 20000524 b 200006 906 S 0 462.0 5 20000529 1055 B 1 467 1
12 2 20000524 b 200006 906 S 0 462.0 5 20000529 1055 B 1 467 1
13 2 20000524 b 200006 906 S 0 462.0 5 20000529 1055 B 1 467 1
14 2 20000524 b 200006 906 S 0 462.0 5 20000529 1055 B 1 467 3
15 2 20000524 b 200006 906 S 0 462.0 5 20000529 1055 B 1 467 3
16 2 20000524 b 200006 912 S 0 459.2 5 20000529 1055 B 1 467 3
17 2 20000524 b 200006 912 S 0 459.2 5 20000529 1055 B 1 467 2
18 2 20000524 b 200006 912 S 0 459.2 5 20000529 1055 B 1 467 2
19 2 20000524 b 200006 912 S 0 459.2 5 20000529 1055 B 1 467 2
20 2 20000524 b 200006 912 S 0 459.2 5 20000529 1055 B 1 467 2
By the way, if you don't want see the different date in the same line, as those of acno=2,
you can do it in the same way.