Suppose that I had a data set that contained a list of names that contained additional columns that group names based on name type (first, last, or middle) and length (short or long):
ID | NameType | Length | Name |
1 | First | Short | Jon |
2 | First | Long | Alexander |
3 | Middle | Short | Todd |
4 | Middle | Long | William |
5 | Last | Short | Smith |
6 | Last | Long | Stephanopoulos |
How can I create all unique combinations of names from each of the groups by selecting only 1 first name that is either short or long, 1 middle name that is either short or long, and 1 last name that is either short or long? For example:
Jon | Todd | Smith |
Jon | William | Smith |
Jon | Todd | Stephanopoulos |
Jon | William | Stephanopoulos |
Alexander | Todd | Smith |
Alexander | William | Smith |
Alexander | Todd | Stephanopoulos |
Alexander | William | Stephanopoulos |
I thought that proc plan would work but I can't figure out how to do it. Any help would be greatly appreciated.
Here's one way:
data have; informat id best4. NameType $6. Length $5. Name $25.; input ID NameType Length Name ; datalines; 1 First Short Jon 2 First Long Alexander 3 Middle Short Todd 4 Middle Long William 5 Last Short Smith 6 Last Long Stephanopoulos ; run; proc sql; create table FirstAndMid as select a.name as firstName, b.name as Middlename,c.name as Lastname from (select name from have where Nametype='First') as a, (select name from have where Nametype='Middle') as b, (select name from have where Nametype='Last') as c ; quit;
Note that I basically ignore the length as you didn't have any duplicate names with different lengths within a type.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.