Okay now that we have some clarity of output. Two possibly approaches depending on range of values:
Quite often moderately complex logic involving a single variable can be solved with a custom format.
Proc format library=work;
picture score (default=11)
0 -< 40 = "09)" (prefix="Score (")
70 <- 100 = "009)" (prefix="Score (")
other=" "
;
run;
data example;
input id visit$ visit_num var1 var2 var3;
/* string manipulation approach*/
length t1 t2 t3 $ 11;
/* if (.<var1<40) or var1>70 then t1= catx(' ',"Score1",cats('(',var1,')'));*/
/* if (.<var2<40) or var2>70 then t2= catx(' ',"Score2",cats('(',var2,')'));*/
/* if (.<var3<40) or var3>70 then t3= catx(' ',"Score3",cats('(',var3,')'));*/
/* use of a format*/
t1=put(var1,score.);
t2=put(var2,score.);
t3=put(var3,score.);
tt = catx('|',t1,t2,t3);
drop t1 t2 t3 tt i;
do i= 1 to countw(tt,'|');
total=scan(tt,i,'|');
output;
end;
datalines;
1 Visit1 1 20 30 35
1 Visit2 2 75 35 45
2 Visit1 3 99 15 34
2 Visit2 4 55 38 48
3 Visit1 5 . . .
3 Visit1 6 100 . .
;
run;
I commented out an approach using direct sting manipulation to show the correct logic for your range selection.
The Proc format values list used by Picture, value and invalue statements can use a <- b, a-b, a-<b or a<-<b which correspond to intervals of (a,b] [a,b] [a,b) and (a,b) where [ or ] indicate the boundary value is included and ( or ) indicate the boundary value is excluded.
You did not indicate the maximum value a score might have. The format I defined only goes to 100. If you need larger values then increase 100 to that value. If you need more than 3 digits then you will need to add additional 0 before the 009 to match that length and you should increase the (default= ) value to match the increased characters. The default indicates the default length of a result if a length is not assigned to a target variable. The prefix tells the format to place that text in front of the resolved format value, the 09 and 009 are digit selectors, the 0 are optional and the 9(or any digit except 0) indicates a required value. If you have additional 9 in the format and the value won't fill the picture such as a value of 2 with a '99' digit selector you get a leading 0 displayed: 02. The ) after the 9 is the last character to display.
... View more