I\'d like to transpose a dataset, but SAS insists on adding a new column, if the \"by\" column has multiple entries.
So if I run
data test;
input a b
data output;
set test;
array vars {*} b -- c; * define array composed of list of variables from B to C, have to be of same type;
length varname $32;
keep a varname value;
do i=1 to dim(vars);* loop array (list of variables);
varname= vname(vars(i));* get name of variable that provided value;
value = vars(i);* get the value of variable;
output; *output row;
end;
run;
You can't use PROC TRANSPOSE in a single step with a 'mixed' dataset (multiple rows per by group AND multiple columns) to get long. Transpose only really works well going all one or the other.
Easiest way to get long is usually the data step.
data want;
set test;
array vars b c;
do _i = 1 to dim(vars);
varname = vname(vars[_i]);
value = vars[_i];
output;
end;
keep a varname value;
run;
This ought to work (using your example code):
proc transpose data=test out=test_tran1(rename=(_name_ = old_var));
by a;
var b c;
run;
proc transpose data=test_tran1 out=test_tran2(drop=_: rename = (col1=values) where = (not missing(values)));
by a old_var;
var col:;
run;