BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
stancemcgraw
Obsidian | Level 7

data have: 

 

StudyNumResponseScoreAssessmentAssessmentAssessmentDT
1233Y Frailty7/8/18 6:00
1233N Dementia 
1096 2Frailty 
1236N Dementia 
1236Y3Frailty7/11/18 3:00
1253Y4Frailty8/9/18 5:00

data want:

 each study number has a response, a score assessment, an assessment, and an assessment DT long ways. Is there a macro code to transpose those variables so I don't have to do several transpose steps?

1 ACCEPTED SOLUTION

Accepted Solutions
data_null__
Jade | Level 19
data have;
   infile cards missover;
   input StudyNum 4. + 1 Response $1. +1 ScoreAssessment 1.  Assessment:$16. AssessmentDT &mdyampm.;
   format AssessmentDT  datetime.; 
   cards;
1233 Y   Frailty 7/8/18 6:00 
1233 N   Dementia   
1096   2 Frailty   
1236 N   Dementia   
1236 Y 3 Frailty 7/11/18 3:00 
1253 Y 4 Frailty 8/9/18 5:00 
;;;;
   run;
proc sort;
   by studynum;
   run;
proc print;
   run; 
%macro t(var=);
   proc transpose data=have out=&var(drop=_name_) suffix=&var;
      by studynum;
      var &var;
      id Assessment;
      run;
   %mend t;
%t(var=ScoreAssessment);
%t(var=Response)
%t(var=AssessmentDT);

data want;
   merge ScoreAssessment response Assessmentdt;
   by studynum;
   run;

View solution in original post

5 REPLIES 5
novinosrin
Tourmaline | Level 20

data want is not clear to me, may i request you to provide that too 

stancemcgraw
Obsidian | Level 7
StudyNumResponseScoreAssessmentAssessmentAssessmentDT
1233Y Frailty7/8/18 6:00
1233N Dementia 
1096 2Frailty 
1236N Dementia 
1236Y3Frailty7/11/18 3:00
1253Y4Frailty8/9/18 5:00

 

data want:

studynum   FrailtyScore   Dementia Score    Frailty    Dementia       FrailtyAssessmentDT     Dementia AssessmentDT

1233             3                           .                        Yes         No                7/8/16: 6:00                           .

data_null__
Jade | Level 19
data have;
   infile cards missover;
   input StudyNum 4. + 1 Response $1. +1 ScoreAssessment 1.  Assessment:$16. AssessmentDT &mdyampm.;
   format AssessmentDT  datetime.; 
   cards;
1233 Y   Frailty 7/8/18 6:00 
1233 N   Dementia   
1096   2 Frailty   
1236 N   Dementia   
1236 Y 3 Frailty 7/11/18 3:00 
1253 Y 4 Frailty 8/9/18 5:00 
;;;;
   run;
proc sort;
   by studynum;
   run;
proc print;
   run; 
%macro t(var=);
   proc transpose data=have out=&var(drop=_name_) suffix=&var;
      by studynum;
      var &var;
      id Assessment;
      run;
   %mend t;
%t(var=ScoreAssessment);
%t(var=Response)
%t(var=AssessmentDT);

data want;
   merge ScoreAssessment response Assessmentdt;
   by studynum;
   run;
stancemcgraw
Obsidian | Level 7

Great thank you that worked!!!!

ballardw
Super User

@stancemcgraw wrote:
StudyNum Response ScoreAssessment Assessment AssessmentDT
1233 Y   Frailty 7/8/18 6:00
1233 N   Dementia  
1096   2 Frailty  
1236 N   Dementia  
1236 Y 3 Frailty 7/11/18 3:00
1253 Y 4 Frailty 8/9/18 5:00

 

data want:

studynum   FrailtyScore   Dementia Score    Frailty    Dementia       FrailtyAssessmentDT     Dementia AssessmentDT

1233             3                           .                        Yes         No                7/8/16: 6:00                           .


Please make output data based on example input. Your input does not show any value for FrailtyScore (or any value of 3 for that matter) associated with studynum=1233

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
  • 5 replies
  • 1710 views
  • 0 likes
  • 4 in conversation