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;
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.