I have got a requirement where i the variable is having multiple timepoints and they need to be in a sequence that were specified as per the specification and there are other two timepoint variables. here first i need to add a condition, if the sequence of first timepoint variable is not as per the order then the whole record must come in the output and also if the timepoint in either of the other two variables(TP2, TP3) if it is not matching with the first one(TP1) then it should come in the output. I was able to achieve the second requirement but i am not able to find a solution for the first requirement. In the first requirement the sequence of TP1 variable should be (1,2,3,5,7,8,9,10,11) in this sequence 4 and 6 were missing as that will be present in other dataset. if this is not in sequence then it must be in output. Can someone please help.
example dataset
data ndsn;
infile datalines;
input subject visit $4. TP1 TP2 TP3;
datalines;
101 Day1 1 1 1
101 Day1 2 4 2
101 Day1 3 2 3
101 Day1 5 4 5
101 Day1 7 7 7
101 Day1 8 8 8
101 Day1 9 8 9
101 Day1 10 10 10
101 Day1 11 10 11
101 Day2 1 1 1
101 Day2 2 4 2
101 Day2 5 2 3
101 Day2 3 4 5
101 Day2 5 7 7
101 Day2 8 8 8
101 Day2 7 8 9
101 Day2 10 10 10
101 Day2 8 10 11
;
run;
desired output
data ndsn;
infile datalines;
input subject visit $4. TP1 TP2 TP3;
datalines;
101 Day1 2 4 2
101 Day1 3 2 3
101 Day1 5 4 5
101 Day1 9 8 9
101 Day1 11 10 11
101 Day2 2 4 2
101 Day2 5 2 3
101 Day2 3 4 5
101 Day2 5 7 7
101 Day2 7 8 9
101 Day2 8 10 11
;
run;
Use the RANGE function to detect if the results vary. If they don't, then remove them from the data set.
data want_mm (drop = flag);
set have;
if range(of tp1-tp3) = 0 then flag = "1";
else flag = "0";
if flag = "0" then output;
run;
Obs subject visit TP1 TP2 TP3 1 101 Day1 2 4 2 2 101 Day1 3 2 3 3 101 Day1 5 4 5 4 101 Day1 9 8 9 5 101 Day1 11 10 11 6 101 Day2 2 4 2 7 101 Day2 5 2 3 8 101 Day2 3 4 5 9 101 Day2 5 7 7 10 101 Day2 7 8 9 11 101 Day2 8 10 11
Use the RANGE function to detect if the results vary. If they don't, then remove them from the data set.
data want_mm (drop = flag);
set have;
if range(of tp1-tp3) = 0 then flag = "1";
else flag = "0";
if flag = "0" then output;
run;
Obs subject visit TP1 TP2 TP3 1 101 Day1 2 4 2 2 101 Day1 3 2 3 3 101 Day1 5 4 5 4 101 Day1 9 8 9 5 101 Day1 11 10 11 6 101 Day2 2 4 2 7 101 Day2 5 2 3 8 101 Day2 3 4 5 9 101 Day2 5 7 7 10 101 Day2 7 8 9 11 101 Day2 8 10 11
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
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.