J*y 发帖数: 271 | 1 我有一组数据:
Date SeriesNO TypeA TypeB TypeC
1/12/2011 1 50 30 .
1/12/2011 2 . 60
1/14/2011 3 10 2 7
需要用sas程序转换成如下:
Date SeriesNO TYPE AMOUNT
1/12/2011 1 A 50
1/12/2011 1 B 30
1/12/2011 2 B 60
1/14/2011 3 A 10
1/14/2011 3 B 2
1/14/2011 3 C 7
求sas大牛帮助。
谢谢。 |
h******s 发帖数: 3420 | 2 Transpose
【在 J*y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我有一组数据: : Date SeriesNO TypeA TypeB TypeC : 1/12/2011 1 50 30 . : 1/12/2011 2 . 60 : 1/14/2011 3 10 2 7 : 需要用sas程序转换成如下: : Date SeriesNO TYPE AMOUNT : 1/12/2011 1 A 50 : 1/12/2011 1 B 30 : 1/12/2011 2 B 60
|
c*******o 发帖数: 3829 | 3 proc transpose data=youdata out=two(rename=(_Name_=Type col1=Amount));
by Date SeriesNO;
run;
data three;
set two;
where Amount ne .;
Type=substr(Type,5);
run; |
d******9 发帖数: 404 | 4 这个是 rotate 吧,比 transpose 容易多了,可以不用 Proc Transpose, 只需要
data step 就行。
Data B;
Set A;
By date seriesNo;
Array Z (3) _temporary_ ("A","B","C");
Array T(3) TypeA TypeB TypeC;
If first seriesNo then do I=1 to dim(T);
Type=Z(I);
Amount=T(I);
if Amount=. then delete;
output;
end;
run; |
y****n 发帖数: 46 | 5 data want;
array xx(3) TypeA TypeB TypeC;
set have;
length TYPE $1;
by date SeriesNO notsorted;
do i=1 to 3;
TYPE=substr(vname(xx(i)),5);
AMOUNT=xx(i);
if AMOUNT ne . then output;
end;
drop TypeA TypeB TypeC i;
run; |