DATA Step, Macro, Functions and more

OD matrix (long form to a matrix form)

Accepted Solution Solved
Reply
Contributor
Posts: 40
Accepted Solution

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
Respected Advisor
Posts: 4,925

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

View solution in original post


All Replies
Solution
‎07-14-2013 08:55 PM
Respected Advisor
Posts: 4,925

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.

Need further help from the community? Please ask a new question.

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