🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Calcite | Level 5

## Transpose Question

Hi,

It's kind of Transpose question.

Now I have data,

 ID UnitNum OwnCar1 OwnCar2 OwnCar3 1 1 2 1 3 1 2 2 1 3 1 3 2 1 3 2 1 2 4 2 3 2 4

I wonder how can I transpose to,

 ID UnitNum OwnCar 1 1 2 1 2 1 1 3 3 2 1 2 2 3 4

Many thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
Tourmaline | Level 20

## Re: Transpose Question

If not the simple above, then my assumption2

``````data have;
infile cards truncover;
input ID	UnitNum	OwnCar1	OwnCar2	OwnCar3;
cards;
1	1	2	1	3
1	2	2	1	3
1	3	2	1	3
2	1	2	4	.
2	3	2	4	.
;

proc transpose data= have out=temp(drop=_name_ where=(owncar ne .) rename=(col1=owncar));
by id unitnum;
var owncar:;
run;
data want;
do until(last.id);
k+1;
do _iorc_=1 by 1 until(last.unitnum);
set temp;
by id unitnum;
if _iorc_=k then output;
end;
end;
k=.;
drop k;
run;``````

4 REPLIES 4
Tourmaline | Level 20

## Re: Transpose Question

Hi @jordenlam  i am going with my assumption

Are you sure about

2  3  4 result(the last one)

``````data have;
infile cards truncover;
input ID	UnitNum	OwnCar1	OwnCar2	OwnCar3;
cards;
1	1	2	1	3
1	2	2	1	3
1	3	2	1	3
2	1	2	4	.
2	3	2	4	.
;

data want;
set have;
array t owncar1-owncar3;
OwnCar=t(unitnum);
run;``````
Tourmaline | Level 20

## Re: Transpose Question

If not the simple above, then my assumption2

``````data have;
infile cards truncover;
input ID	UnitNum	OwnCar1	OwnCar2	OwnCar3;
cards;
1	1	2	1	3
1	2	2	1	3
1	3	2	1	3
2	1	2	4	.
2	3	2	4	.
;

proc transpose data= have out=temp(drop=_name_ where=(owncar ne .) rename=(col1=owncar));
by id unitnum;
var owncar:;
run;
data want;
do until(last.id);
k+1;
do _iorc_=1 by 1 until(last.unitnum);
set temp;
by id unitnum;
if _iorc_=k then output;
end;
end;
k=.;
drop k;
run;``````

Calcite | Level 5

## Re: Transpose Question

Yeah! It should be your assumption2. Many thanks!

Tourmaline | Level 20

## Re: Transpose Question

``````data have;
infile cards truncover;
input ID	UnitNum	OwnCar1	OwnCar2	OwnCar3;
cards;
1	1	2	1	3
1	2	2	1	3
1	3	2	1	3
2	1	2	4	.
2	3	2	4	.
;

data want;
do _n_=1 by 1 until(last.id);
set have;
by id;
array t(*) OwnCar1	OwnCar2	OwnCar3;
OwnCar=t(_n_);
output;
end;
keep  id unitnum owncar;
run;``````

``` ```

Discussion stats
• 4 replies
• 370 views
• 0 likes
• 2 in conversation