Hi all,
I have a dataset of patients using a drug. Each person has used the drug for Total_days and the dosage of each day is shown in dose_day[i]. Most patients have interruptions (days with dose_day[i]=0) when they received the drug. A simplified data set looks like this:
ID | Total_days | dose_day1 | dose_day2 | dose_day3 | dose_day4 | dose_day5 | dose_day6 | dose_day7 | dose_day8 | dose_day9 | dose_day10 | dose_day11 | dose_day12 | dose_day13 | dose_day14 | dose_day15 | dose_day16 | dose_day17 | dose_day18 | dose_day19 | dose_day20 | dose_day21 | dose_day22 | dose_day23 | dose_day24 | dose_day25 |
1 | 18 | 30 | 30 | 30 | 15 | 0 | 0 | 45 | 45 | 45 | 60 | 60 | 0 | 0 | 0 | 45 | 45 | 60 | 60 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 25 | 15 | 15 | 15 | 25 | 25 | 25 | 25 | 25 | 40 | 0 | 0 | 0 | 0 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 25 | 25 | 25 | 25 |
3 | 21 | 70 | 70 | 70 | 70 | 70 | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 30 | 30 | 0 | 0 | 0 | 20 | 20 | 20 | 40 | 0 | 0 | 0 | 0 |
4 | 19 | 40 | 40 | 40 | 40 | 60 | 60 | 60 | 0 | 0 | 0 | 50 | 50 | 50 | 50 | 50 | 50 | 65 | 65 | 65 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 15 | 15 | 15 | 15 | 15 | 15 | 25 | 25 | 25 | 25 | 25 | 25 | 10 | 10 | 10 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
6 | 25 | 80 | 80 | 80 | 80 | 80 | 80 | 80 | 50 | 50 | 50 | 50 | 0 | 0 | 0 | 0 | 0 | 50 | 50 | 50 | 90 | 90 | 90 | 90 | 90 | 90 |
7 | 22 | 25 | 25 | 25 | 40 | 40 | 40 | 40 | 40 | 65 | 65 | 65 | 65 | 65 | 65 | 65 | 0 | 0 | 0 | 0 | 40 | 40 | 40 | 0 | 0 | 0 |
I want to know what their dose trend was. Basically, if I was doing this task manually I would make a plot for each person with x being 1 to i where i=Total_days and y being the amount of drug received on that day (Total_dose[i]) and then I would fit a trendline on that plot. My goal is to have a variable "slope" that is "Pos" if the slope of the trend line is positive "Neg" if the slope is negative and "Zero" in the unlikely case that the slope is actually zero.
Does anyone know how can this be done in SAS 9.4 TS?
Many thanks,
First, you would run PROC TRANSPOSE to create a long data set, rather than a wide data set. Then turn the zeros into missing. Lastly, run regressions or estimate trends with a BY ID; statement.
Here's the PROC TRANSPOSE part and the turning zeros into missing part
proc transpose data=have out=t;
by id;
var dose_day:;
run;
data t1;
set t;
if col1=0 then col1=.;
day=input(substr(_name_,9),3.);
run;
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.