1234nu 发表于 2013-6-28 14:12 
谢谢大神!
我的问题还在于表b中有关于不同ID,很多日期的数据,也就是说不仅有ID1, 20120305 ...
前面方法的思路是将数据集 b 转换成数据集 a 的格式然后合并. 如果date变量多的话,可一将其它 date 加入 第33, 36, 40 行。
或者将 date1, date2 改成 date1-daten.
还可以将第 41 行去掉,看看结果如何.
另外, 可以将数据集 a 转换成数据集 b 的格式,然后合并,transpose,最后去掉不必要的行。 如下。
- data a;
- input ID $ DATE1 yymmdd10. DATE2 yymmdd10. DATE3 yymmdd10.;
- format ID 1.;
- format date1 date2 date3 yymmdd10.;
- datalines;
- 1 20120305 20120508 20120509
- 2 20090807 20090808 20090809
- 3 20090807 20090808 20090809
- ; run;
- data b;
- input ID $ DATE yymmdd10. PRICE;
- format ID $1.;
- format date yymmdd10.;
- datalines;
- 1 20120305 3.6
- 1 20120508 5.6
- 2 20090807 8.9
- 2 20090808 7.3
- ; run;
- data a1;
- format id $1. date yymmdd10.;
- array d{*} date1-date3;
- set a;
- do i = 1 to dim(d);
- date=d(i);
- output;
- end;
- drop i;
- run;
- proc sort data=a1; by id date; run;
- proc sort data=b out=b1; by id date; run;
- data a1_b1;
- merge a1 b1;
- by id;
- run;
- proc transpose data=a1_b1 out=a1b1(drop=_name_) prefix=price;
- by id;
- var price;
- copy date1-date3;
- run;
- proc sort data=a1b1 out=a2b2 nodupkey;
- by id;
- run;
复制代码