BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Melk
Lapis Lazuli | Level 10

I have a dataset with the following variables: ID (character), genotype (character). The dataste looks like this

 

     ID         gene

     A1        WT

     A2        Het

     A3        Hom

     B1        Het

     B2        Hom

     C1        WT

 

 

I want to create a table with the distinct values of gene as the column headers and the ID variables as observations, and then export to an excel document. How can I go about doing this?

 

     WT     Het     Hom

     A1      A2       A3

     C1      B1      B2

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
art297
Opal | Level 21

I don't think @Jagadishkatam's code will work without some additional code, but here is a version using the same concept:

data have;
   input (ID gene) ($);
   cards;
     A1        WT
     A2        Het
     A3        Hom
     B1        Het
     B2        Hom
     C1        WT
     D1        WT
;

proc sort data=have out=need;
  by gene;
run;

data need;
  set need;
  by gene;
  if first.gene then _counter=1;
  else _counter+1;
run;

proc sort data=need;
  by _counter;
run;

proc transpose data=need out=want (drop=_:);
  by _counter;
  var id;
  id gene;
run;

Art, CEO, AnalystFinder.com

View solution in original post

3 REPLIES 3
Jagadishkatam
Amethyst | Level 16

This is an untested code which you could try

 

data have;
input ID $2. gene $;
cards;
A1 WT
A2 Het
A3 Hom
B1 Het
B2 Hom
C1 WT
;

proc transpose data=have out=want;
id gene;
var id ;
run;
Thanks,
Jag
art297
Opal | Level 21

I don't think @Jagadishkatam's code will work without some additional code, but here is a version using the same concept:

data have;
   input (ID gene) ($);
   cards;
     A1        WT
     A2        Het
     A3        Hom
     B1        Het
     B2        Hom
     C1        WT
     D1        WT
;

proc sort data=have out=need;
  by gene;
run;

data need;
  set need;
  by gene;
  if first.gene then _counter=1;
  else _counter+1;
run;

proc sort data=need;
  by _counter;
run;

proc transpose data=need out=want (drop=_:);
  by _counter;
  var id;
  id gene;
run;

Art, CEO, AnalystFinder.com

Melk
Lapis Lazuli | Level 10

Worked perfectly, thanks!

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 2127 views
  • 3 likes
  • 3 in conversation