Calcite | Level 5

## 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.

1 ACCEPTED SOLUTION

Accepted Solutions
Opal | Level 21

## 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
2 REPLIES 2
Opal | Level 21

## 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
Calcite | Level 5

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

Thanks! It works!

Discussion stats
• 2 replies
• 1102 views
• 1 like
• 2 in conversation