[Base SAS] SAS中数据的转置:PROC TRANSPOSE过程
(2011-10-17 10:58:33)
标签:
杂谈 |
分类: SAS |
TRANSPOSE过程的格式如下所示:
PROC TRANSPOSE <DATA=input-data-set> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix>;
BY
<DESCENDING> variable-1
<...<DESCENDING>
variable-n>
<NOTSORTED>;
COPY
variable(s);
ID
variable;
IDLABEL
variable;
VAR variable(s);
在PROC TRANSPOSE语句中可能出现的选择项有:
1)DATA=数据集名,用来说明要转置的数据集名,如果省略这一选择,则指定最新建立的数据集。
2)OUT=数据集名,用来说明转置所建立的新数据集名,如果省略这一选择,SAS将按内部程式给出新的数据集名。
3)LET 当ID出现重复时,那么只选用最后一条
4)NAME=字母
为含有输入数据集中被转置的变量名的输出数据集中的变量命名,如果省略这一选择,SAS将按内部程式指定为_NAME_。
5)PREFIX=字母(指定一个前缀,用来构成新变量名)。
BY语句 使输入数据集分组转置,分组变量被包括在输出数据集中。
COPY语句 将变量复制到新的数据集中。
ID语句 用来指定转置后的变量名
IDLABEL语句 为转置后的变量名添加标签
VAR语句中应列出要被转置的变量名,否则原数据集中未在其他语句中列出的所有数值型变量都将被转置,字符型变量必须在VAR语句中列出才能被转置,未被转置的变量不进入新的数据集,除非它们已列入COPY或BY语句。
示例1:
data score;
input Student $9. +1 StudentID
$ Section $ Test1 Test2 Final;
datalines;
Capalleti 0545 1 94 91
87
Dubose 1252
2 51 65 91
Engles 1167
1 95 97 97
Grant
1230
2 63 75 80
Krupski 2527
2 80 76 71
Lundsford 4860 1 92 40
86
McBane 0674
1 75 78 72
;
proc transpose data=score out=idlabel name=Test prefix=sn;
id studentid;
idlabel student;
run;
proc print data=idlabel label noobs;
title 'Student Test
Scores';
run;
输出OUTPUT:
----------------------------------------------------
以前的变量名
Capalleti
Dubose
Engles
Grant
Krupski
Lundsford
McBane
Test1
94
51
95
63
80
92
75
Test2
91
65
97
75
76
40
78
Final
87
91
97
80
71
86
72
示例2:
data sale;
input salerid foodid money foodname $;
cards;
1 1 100 egg
1 2 300 cake
1 3 400 apple
2 2 230 cake
2 3 444 apple
2 4 540 pear
3 1 123 egg
3 2 120 cake
3 3 200 apple
3 4 500 pear
;
run;
proc transpose data=sale out=saleout name=Saler prefix=Food;
id foodid;
idlabel foodname;
by salerid;
run;
proc print data=saleout label noobs;
run;
输出OUTPUT:
----------------------------------------------------
salerid
以前的变量名 egg
cake
apple pear
1
money
100
300
400
.
2
money
.
PROC TRANSPOSE <DATA=input-data-set> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix>;
在PROC TRANSPOSE语句中可能出现的选择项有:
1)DATA=数据集名,用来说明要转置的数据集名,如果省略这一选择,则指定最新建立的数据集。
2)OUT=数据集名,用来说明转置所建立的新数据集名,如果省略这一选择,SAS将按内部程式给出新的数据集名。
3)LET 当ID出现重复时,那么只选用最后一条
4)NAME=字母
5)PREFIX=字母(指定一个前缀,用来构成新变量名)。
BY语句 使输入数据集分组转置,分组变量被包括在输出数据集中。
COPY语句 将变量复制到新的数据集中。
ID语句 用来指定转置后的变量名
IDLABEL语句 为转置后的变量名添加标签
VAR语句中应列出要被转置的变量名,否则原数据集中未在其他语句中列出的所有数值型变量都将被转置,字符型变量必须在VAR语句中列出才能被转置,未被转置的变量不进入新的数据集,除非它们已列入COPY或BY语句。
示例1:
data score;
Capalleti 0545 1
Dubose
Engles
Grant
Krupski
Lundsford 4860 1
McBane
;
proc transpose data=score out=idlabel name=Test prefix=sn;
run;
proc print data=idlabel label noobs;
run;
输出OUTPUT:
----------------------------------------------------
以前的变量名
示例2:
data sale;
input salerid foodid money foodname $;
cards;
1 1 100 egg
1 2 300 cake
1 3 400 apple
2 2 230 cake
2 3 444 apple
2 4 540 pear
3 1 123 egg
3 2 120 cake
3 3 200 apple
3 4 500 pear
;
run;
proc transpose data=sale out=saleout name=Saler prefix=Food;
run;
proc print data=saleout label noobs;
run;
输出OUTPUT:
----------------------------------------------------
salerid