Solved
Contributor
Posts: 40

# OD matrix (long form to a matrix form)

Suppose there are three districts: ag, du, and si. And the "count" variable indicates the number of people moving from a district from another district.

origin destination count

ag ag 0

ag du 41

ag si 13

du ag 3

du du 0

du si 79

si ag 7

si du 6

si si 0

And I have to convert the above data to a matrix form as follows:

0 41 13

3 0 79

7 6 0

How do I have to write the code to do that? Thanks.

Accepted Solutions
Solution
‎07-14-2013 08:55 PM
Posts: 5,535

## Re: OD matrix (long form to a matrix form)

Use transpose :

data OD;
input origin \$ destination \$ count;
datalines;
ag ag 0
ag du 41
ag si 13
du ag 3
du du 0
du si 79
si ag 7
si du 6
si si 0
;

proc sort data=OD; by origin destination; run;

proc transpose data=OD out=ODmat(drop=_NAME_);
by origin;
var count;
id destination;
run;

proc print data=ODmat noobs; run;

PG

PG

All Replies
Solution
‎07-14-2013 08:55 PM
Posts: 5,535

## Re: OD matrix (long form to a matrix form)

Use transpose :

data OD;
input origin \$ destination \$ count;
datalines;
ag ag 0
ag du 41
ag si 13
du ag 3
du du 0
du si 79
si ag 7
si du 6
si si 0
;

proc sort data=OD; by origin destination; run;

proc transpose data=OD out=ODmat(drop=_NAME_);
by origin;
var count;
id destination;
run;

proc print data=ODmat noobs; run;

PG

PG
Contributor
Posts: 40

## Re: OD matrix (long form to a matrix form)

Thanks! It works!

🔒 This topic is solved and locked.