Sas 将数据集中的行转换为变量
我有如下数据集:-Sas 将数据集中的行转换为变量,sas,Sas,我有如下数据集:- data club; input Name $ Gov_Type $ YR1 YR2 YR3; datalines; Afg COC 10 20 30 Afg GE 20 30 40 Afg PS 10 3 202 Afg RQ . 30 10 Brh COC 10 . 30 Brh GE 4 12 33 Brh PS 12 43 12 Brh RQ 19 3 12 Gen COC 32 . 65 Gen GE 13 93 44 Gen PS 12 38 12 Gen RQ
data club;
input Name $ Gov_Type $ YR1 YR2 YR3;
datalines;
Afg COC 10 20 30
Afg GE 20 30 40
Afg PS 10 3 202
Afg RQ . 30 10
Brh COC 10 . 30
Brh GE 4 12 33
Brh PS 12 43 12
Brh RQ 19 3 12
Gen COC 32 . 65
Gen GE 13 93 44
Gen PS 12 38 12
Gen RQ 13 1 13
;
我想更改它,使COC
、GE
、PS
和RQ
成为变量,并将YR1
、YR2
和YR3
的值显示为以下数据集:-
data club2;
input Name $ YR $ COC GE PS RQ;
datalines;
Afg YR1 10 20 10 .
Afg YR2 20 30 3 30
Afg YR3 30 40 202 10
Brh YR1 10 4 12 9
Brh YR2 . 12 43 3
Brh YR3 30 33 12 12
Gen YR1 32 13 12 13
Gen YR2 . 93 38 1
Gen YR3 65 44 12 13
;
我怎样才能做到这一点
提前谢谢。试试这个
data club;
input Name $ Gov_Type $ YR1 YR2 YR3;
datalines;
Afg COC 10 20 30
Afg GE 20 30 40
Afg PS 10 3 202
Afg RQ . 30 10
Brh COC 10 . 30
Brh GE 4 12 33
Brh PS 12 43 12
Brh RQ 19 3 12
Gen COC 32 . 65
Gen GE 13 93 44
Gen PS 12 38 12
Gen RQ 13 1 13
;
data temp;
set club;
array y yr:;
do over y;
yr = y;
v = vname(y);
output;
end;
drop yr1-yr3;
run;
proc sort data = temp;
by Name v Gov_Type;
run;
data club2;
do i = 1 by 1 until (last.v);
set temp;
by Name v;
array g{*} coc ge ps rq;
if upcase(Gov_Type) = upcase(vname(g[i])) then g[i] = yr;
end;
drop i yr Gov_Type;
run;
所需的数据转换很容易通过
Proc TRANSPOSE
完成
proc transpose data=club out=stage(rename=_name_=YR);
by name;
id Gov_type;
run;
如果转换用于报告目的,考虑使用Proc tablate
proc tabulate data=club;
class name gov_type;
var yr1-yr3;
table name=''*(yr1-yr3)*sum=' '*f=9.,gov_type;
run;