Reputation: 844
If I have a dataset structured like this:
year quarter var_1 var_2 var_3
2000 1 5 8 1
2000 2 3 11 5
2000 3 8 2 10
How could I reshape it to this:
year quarter variable value
2000 1 var_1 5
2000 2 var_1 3
2000 3 var_1 8
2000 1 var_2 8
2000 2 var_2 11
2000 3 var_2 2
2000 1 var_3 1
2000 2 var_3 5
2000 3 var_3 10
I've tried some different things with proc transpose but can't figure it out exactly.
Upvotes: 0
Views: 32
Reputation: 12849
Transpose by year quarter
.
proc transpose data = have2
out = want(rename=(COL1=value) )
name = variable
;
by row year quarter;
var var:;
run;
year quarter variable value
2000 1 var_1 5
2000 1 var_2 8
2000 1 var_3 1
2000 2 var_1 3
2000 2 var_2 11
2000 2 var_3 5
2000 3 var_1 8
2000 3 var_2 2
2000 3 var_3 10
Upvotes: 1
Reputation: 51566
This looks like another direct application of PROC TRANSPOSE, like your previous question. This time with a BY statement.
data have;
input year quarter var_1-var_3 ;
cards;
2000 1 5 8 1
2000 2 3 11 5
2000 3 8 2 10
;
proc transpose data=have out=want;
by year quarter;
var var_1-var_3;
run;
Results
Obs year quarter _NAME_ COL1
1 2000 1 var_1 5
2 2000 1 var_2 8
3 2000 1 var_3 1
4 2000 2 var_1 3
5 2000 2 var_2 11
6 2000 2 var_3 5
7 2000 3 var_1 8
8 2000 3 var_2 2
9 2000 3 var_3 10
To change the variable names you can use dataset options.
proc transpose data=have out=want(rename=(_name_=variable col1=value));
by year quarter;
var var_1-var_3;
run;
Upvotes: 1