turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- SAS Programming
- /
- SAS Procedures
- /
- Comparing and Matching Character Variables

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

03-28-2012 10:51 AM

Say I have a data set with 4 character variables: x1-x4.

The data looks something like: ab cd ab ca.

I want to compare each variable to the other. Therefore, I have 6 combinations. I am interested in the ones that match (i.e., x1 matches x3, 'ab').

So my output should contain 3 columns:

First and second columns list the variables being compared to each other (total of 6 rows due to 6 combinations).

The third column stating whether or not there is a match.

I know to calculate the number of combinations, I use: c42=comb(4,2).

I am stuck thereafter. Any suggestions?

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

03-28-2012 11:48 AM

OK, I have added one more variable 'num' to identify the original obs no., take it out as you wish.

data have;

input (x1-x4) (:$);

cards;

aa ab aa bd

dd cc dd cc

;

data want (keep=first second match num) ;

set have;

array xx $ x1-x4;

do _i=1 to dim(xx);

do _j=_i+1 to dim(xx);

first=vname(xx(_i));

second=vname(xx(_j));

if xx(_i)=xx(_j) then match='Y';

else match='N';

Num=_n_;

output;

end;

end;

run;

proc print;run;

Regards,

Haikuo

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

03-28-2012 12:52 PM

Thank you very much! That helped a lot and it was very straightforward! I was able to tweak it and fit it to a more complicated data set.

Thanks again!